XAML 基于另一个元素的事件触发器的故事板动画
XAML Storyboard animation baset on EventTrigger from another element
我想通过与另一个元素的交互在一个元素上触发动画。
我有以下代码:
<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 时,应用程序都会进入中断模式。为什么?
您的问题是 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>
我想通过与另一个元素的交互在一个元素上触发动画。 我有以下代码:
<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 时,应用程序都会进入中断模式。为什么?
您的问题是 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>