3

質問があります。ListBoxItem (CS ではなく XAML から) をクリックしたときに、リソースで作成されたストーリーボードを開始するにはどうすればよいですか?

「ListBoxItemStyle1」のEventTriggerでテストしましたが、ストーリーボードにアクセスできず、見つかりませんでした。

これは私のコードです:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
    <Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="Padding" Value="2,0,0,0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <EventTrigger RoutedEvent="Selected">
                            <BeginStoryboard>
                                <!--?????????????????????????????????????????????-->
                            </BeginStoryboard>
                        </EventTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Storyboard x:Key="MyStoryBoard">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="rectangle">
            <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="164"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="rectangle">
            <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="-1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <ListBox HorizontalAlignment="Left" Height="56" Margin="59,39,0,0" VerticalAlignment="Top" Width="147" ItemContainerStyle="{DynamicResource ListBoxItemStyle1}"/>
    <Rectangle x:Name="rectangle" Fill="Red" HorizontalAlignment="Left" Height="87" Margin="59,130,0,0" Stroke="Black" VerticalAlignment="Top" Width="147" RenderTransformOrigin="0.5,0.5">
        <Rectangle.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform/>
                <TranslateTransform/>
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>
</Grid>

4

1 に答える 1

0

イベントでストーリーボードを呼び出したい場合は、それをリソースにして、StaticResource を使用して呼び出します。すべてのリソースが App.xaml で定義されていることを考慮する

<Application.Resources>
    <Storyboard x:Key="MyStoryboard">
        ....
    </Storyboard>
</Application.Resources>

次に、選択したイベントから呼び出します。

...

<EventTrigger RoutedEvent="Selected">
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}"
x:Name="begin_MyStoryboard"/>
</EventTrigger>

うまくいけばそれを助ける

于 2013-01-16T10:13:59.217 に答える