【问题标题】:XAML Storyboard animation baset on EventTrigger from another element基于来自另一个元素的事件触发器的 XAML 故事板动画
【发布时间】:2018-03-23 11:40:34
【问题描述】:

我想通过与另一个元素交互来在一个元素上触发动画。 我有以下代码:

<Grid Name="grid1" Height="100"/>
<ItemsControl>
   <ItemsControl.ItemTemplate>
      <DataTemplate>
          <Grid>
            <Grid.Triggers>
                <EventTrigger RoutedEvent="Grid.MouseDown">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetName="grid1"
                                Storyboard.TargetProperty="Height"
                                From="100"
                                To="60"
                                Duration="0:0:5">
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>
        </Grid>
       </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

每次触发 EventTrigger 时,应用程序都会进入中断模式。为什么?

【问题讨论】:

  • 哦,我的错。但它仍然不起作用。应用进入中断模式。
  • 尝试将Storyboard.TargetName="grid1" 更改为Storyboard.Target="{Binding ElementName=grid1}"Source
  • 另外,发布您收到的错误消息。这将有助于确定问题的根源。
  • 非常感谢!没有任何错误消息,只有页面“应用程序处于中断模式”,但将 TargetName 更改为 Target 后,它可以工作:)

标签: wpf xaml animation storyboard


【解决方案1】:

您的问题是 itemscontrol 中的每个项目都有自己的名称范围。将找不到 grid1,因为它不在该名称范围内。这是必要的,否则您将无法在此类模板中按名称引用事物。

此代码有效,因为只有一个 itemscontrol,并且它与 grid1 在同一个名称范围内:

<StackPanel>
    <Grid Name="grid1" Height="100"/>
    <ItemsControl  ItemsSource="{Binding Items}"

             >
        <ItemsControl.Triggers>
            <EventTrigger RoutedEvent="Grid.MouseDown">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation
                            Storyboard.TargetName="grid1"
                            Storyboard.TargetProperty="Height"
                            From="100"
                            To="60"
                            Duration="0:0:5">
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </ItemsControl.Triggers>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding}"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2023-03-11
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多