Смоделируйте последовательность нажатий кнопок в коде и дождитесь окончания эффектов - PullRequest
2 голосов
/ 29 марта 2012

У меня есть серия кнопок с эффектами, которые я хотел бы имитировать, нажимая в коде.Проблема в том, что когда я запускаю «someFunction», все эффекты срабатывают примерно одновременно.Я бы хотел нажать кнопку, затем дождаться окончания эффекта и перейти к другим кнопкам.Я пытался использовать Thread.sleep, но это не работает.Кто-нибудь может дать мне несколько советов о том, как это можно сделать?Кроме того, возможно ли симулировать одновременное нажатие нескольких кнопок?

Спасибо за любую помощь!

someFunction() {
    button1.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
    //System.Threading.Thread.Sleep(100); doesn't work wait for effect to finish

    button2.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
    //System.Threading.Thread.Sleep(100);  doesn't work

    button3.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
    //System.Threading.Thread.Sleep(100);  doesn't work

    button4.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}

<Button Name="buttonRed" Background="Red" BorderBrush="Black" BorderThickness="1"
        Grid.Row="1" Grid.Column="0" Click="buttonRedClick">
    <Button.BitmapEffect>
        <BlurBitmapEffect x:Name="redBlur"  Radius="0" />
    </Button.BitmapEffect>
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
                        Storyboard.TargetName="redBlur"
                        Storyboard.TargetProperty="Radius"
                        From="0" To="40" Duration="0:0:0.3"
                        AutoReverse="True" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Button.Triggers>
</Button>

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Thread.sleep не будет работать, так как он определяет реализацию sys.val, поэтому вы можете использовать следующий код:

есть ошибка: <EventTrigger RoutedEvent="Button.Click">

вместо этого должно быть: <Event.Trigger.Sleep RoutedEvent="Button.Click">

0 голосов
/ 29 марта 2012

Попробуйте посмотреть на эту статью Лорана Бюньона.

Сверху артикул:

Обратите внимание, что также можно использовать свойство BeginTime объект анимации для задержки анимации, например, чтобы каскадные анимации. Другой способ - использовать событие Completed , которое может быть установлен в коде XAML или в коде позади. Это событие подразумевает что соответствующий метод должен присутствовать в коде позади, таким образом он не применим для приложений на чистом XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...