Нужно на 2 секунды изменить цвет Border
на другой, но по истечению времени вернуть начальный цвет(чёрный). А какой цвет будет появляться, узнаем из bool
if (true){
Brushes.Green;
}else {
Bruses.Red;
}
Примерно вот так.
Вроде бы все сделал, но куда таймер пихать не пойму. Или задержку. Как сделать?
private SolidColorBrush changeColorForSecond()
{
return Brushes.Green;
}
public async void CheckAnswer(int result, int answer)
{
if (result == answer)
{
RightAnswers++;
SolidColorBrush resdult = await Task.Factory.StartNew(
() => changeColorForSecond(),
TaskCreationOptions.LongRunning);
WorkWindow.border.BorderBrush = resdult;
}
else
{
WrongAnswers++;
}
}
int result = Convert.ToInt32(MathAnswer.Text);
int answer = Convert.ToInt32(new DataTable().Compute(Expression_Math.Content.ToString(), null));
mathWorker.CheckAnswer(result, answer);
Если надо просто сделать задержку и повторить действие, то так и пишите:
WorkWindow.border.BorderBrush = resdult; //Изначальная смена цвета
await Task.Delay(1000); //Задержка
WorkWindow.border.BorderBrush = Bruses.Red; //Вторичная смена цвета
Но этот подход как по мне, не очень правильный, ибо вы обращаетесь к контроллу напрямую (когда лучше использовать привязки, я уже молчу про MVVM) и по сути эту задачу можно решить простым XAML кодом (ибо смена цвета, размера шрифта или каких то еще действий с UI - это задача View).
Напишу простой пример реализации более верного подхода:
<Border Background="Transparent">
<Border.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsAnimated}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color" To="GreenYellow" Duration="0:0:0" />
<ColorAnimation Storyboard.TargetProperty="Background.Color" BeginTime="0:0:5" Duration="0:0:0" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
Здесь я создал некий Border
с изначально прозрачным цветом. В стиле этого элемента я создал DataTriger
, который привязан к некому Bool
, если это свойство true
, то наш триггер выполнит DataTrigger.EnterActions
, а в нем и наша анимация.
Анимация:
По сути анимация из себя представляет временную шкалу, где каждый "тик" что то происходит. Вот мы и задаем две анимации, первая, сменит Background
элемента на зеленый моментально (без задержек). Вторая анимация, благодаря BeginTime
начнется с 5-ой секунды и у нее обратное действие (изменить цвет без задержки на изначальное).
Результат:
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем код должен проверять,что пользователь вводит 16<=число<0Но при вводе символа или если ввести символ и стереть его выводи ошибку...
Пишу игру на unity используя c# под androidСуть кода такова: Объект вращается с постоянной скоростью, но если сделать удерживающее касание (скрипт...
Как грамотно вернуть массив структур из C unmanaged кода воспользовавшись опцией LPArray? На текущий момент маршалю все в ручную, возвращая IntPtr, но хотелось...
Подскажите, пожалуйста, на что указывает и влияет начальное значение в объявлении нового объекта RandomДопустим 999, в нашем случае