【发布时间】:2014-07-01 09:58:17
【问题描述】:
我有一个 WPF ListView,它的 View 属性设置为 GridView。 GridView 有两个 GridViewColumns,每个都有 CellTemplate - 第一列包含按钮,第二列包含边框。我的目标是在单击第一列中的按钮后为第二列中的边框设置动画。
我尝试了以下 XAML:
<ListView>
<ListView.Items>
<ListViewItem />
</ListView.Items>
<ListView.View>
<GridView>
<GridViewColumn Header="First">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Height="25"
Width="50">
<Button.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="MyBorder"
Storyboard.TargetProperty="Opacity"
From="1.0"
To="0.0" Duration="0:0:5"
AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Second">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border Background="Black"
Width="50"
Height="15"
Name="MyBorder"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
但是在运行时单击按钮时,会抛出 InvalidOperationException 并显示以下消息:在“System.Windows.Controls.Button”的名称范围内找不到“MyBorder”名称。
我做错了什么,正确的方法是什么? 提前致谢。
【问题讨论】:
-
无法定位 MyBorder 元素。为了从 Button 事件触发器访问 MyBorder 元素,您应该在 button 的上下文中定义它。
-
您必须采用另一种方法。为了实现这种功能
-
@Vikas 你的意思是没有办法使用 DataTemplates 为 GridViewRow 中的特定单元格设置动画?
-
您可以使用附加属性来达到此目的。
-
@MikhailKarpov 您可以实现这一点,因为 pushpraj 提供了答案。
标签: wpf xaml animation gridview