Как выбрать раскадровку для запуска по нажатию переключателя и кнопки «Далее»? - PullRequest
1 голос
/ 20 января 2011

Я ищу код, который позволил бы запустить определенную раскадровку, на основе которой выбран переключатель.Сценарий состоит в том, чтобы сначала выбрать переключатель, а затем нажать кнопку «Далее», чтобы запустить раскадровку.Например, если выбран первый переключатель и нажата кнопка «Далее», следует воспроизвести первый раскадровку.Любые идеи высоко ценятся.Заранее благодарим.

XAML:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ClickCount.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
    <Storyboard x:Key="Storyboard1">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
            <EasingColorKeyFrame KeyTime="0" Value="Red"/>
            <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FF00FFED"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="Storyboard2">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
            <EasingColorKeyFrame KeyTime="0" Value="Red"/>
            <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FF5AFF00"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="Storyboard3">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
            <EasingColorKeyFrame KeyTime="0" Value="Red"/>
            <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FFFFF500"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <RadioButton GroupName="Os" Content="Storyboard 1" IsChecked="True" FontSize="16" Margin="10,10,10,0"/>
    <RadioButton GroupName="1" Content="Storyboard 2" Margin="10,31,0,0" FontSize="16" />
    <RadioButton GroupName="1" Content="Storyboard 3" Margin="10,50,0,0" FontSize="16" />
    <Button x:Name="Next" Content="Next&gt;" Width="75.06" Height="23" IsDefault="True" 
            Click="ClickNextButton" VerticalAlignment="Top" />
    <Border x:Name="border" BorderBrush="Black" BorderThickness="1" 
            HorizontalAlignment="Center" Height="100" VerticalAlignment="Center" 
            Width="100" Background="Red"/>
</Grid>

C #:

public partial class MainWindow : Window
    public MainWindow()
    {
        this.InitializeComponent();
    }
    private void ClickNextButton(object sender, System.Windows.RoutedEventArgs e) 
    { 
        Counter += 1; 
        if (Counter == 1) { } 
        if (Counter == 2) { } 
    } 
}

1 Ответ

1 голос
/ 20 января 2011

Если вы положите Storyboards внутрь VisualStateManager, вы можете использовать метод GoToState:

VisualStateManager.GoToState(this, "Storyboard1", useTransitions);

Ваш XAML станет примерно таким:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup Name="MyStates">
        <VisualState Name="Storyboard1">
            <Storyboard>
                <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
                    <EasingColorKeyFrame KeyTime="0" Value="Red"/>
                    <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FF00FFED"/>
                </ColorAnimationUsingKeyFrames>
             </Storyboard>
          </VisualState>
          ....
    </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>

Обратите внимание, что имя переместилось с Storyboard на VisualState.

Тогда ваш код выглядит примерно так:

    if (Counter == 1)
    {
        VisualStateManager.GoToState(this, "Storyboard1", useTransitions);
    } 
    if (Counter == 2)
    {
        VisualStateManager.GoToState(this, "Storyboard2", useTransitions);
    } 

(хотя это из памяти, поэтому могут быть синтаксические ошибки)

...