【发布时间】:2010-10-16 14:14:38
【问题描述】:
我开始通过重写现有的 ASP.NET 应用程序来改进 Silverlight(尽管目前感觉相反)——这是一个不错的起点。
我已经“掌握”了从数据库中提取数据、通过服务进入数据网格以及在行中填充图像元素。到目前为止一切顺利。
现在我被卡住了,头疼!
我想在每一行的最后一列添加一个简单的动画(一个绿色矩形在红色矩形上移动以显示进度百分比),但无法将其连接起来。
我的 xaml 看起来像这样:
<data:DataGrid.Columns>
.
.
.
.
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel x:Name="AnimationPanel">
<StackPanel.Resources>
<Storyboard x:Key="ShowProgress">
<DoubleAnimation Storyboard.TargetProperty="Width"
Storyboard.TargetName="goalProgressBar_Complete"
From="0" To="50"
Duration="0:0:5">
</DoubleAnimation>
</Storyboard>
</StackPanel.Resources>
<Rectangle x:Name="goalProgressBar_Complete"
Width="1" Height="100"
Fill="#0aa60e"></Rectangle>
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
这显然是错误的(因为它不起作用),我开始认为不可能以这种方式将动画添加到 Datagrid。我在 Google 上苦苦寻找一段代码,虽然有一些令人兴奋的结果,但它们并没有起到任何作用。
我是在尝试做一些 Silverlight 根本不支持的事情,还是我错过了一些非常简单的事情?
提前致谢。
更新: 虽然我还没有走出困境,但我已经设法让动画与适当的列一起运行。 MasterMax提供的答案让我看了一下EventTriggers,修改后的xaml看起来是这样的:
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Rectangle x:Name="GoalProgress" Height="100" Width="1" Fill="Green">
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Rectangle.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width"
Storyboard.TargetName="GoalProgress"
From="0" To="50" Duration="0:0:5">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
我现在需要做的就是绑定 'To' 属性中的 % 值并添加我的底层红色矩形。毫无疑问,这不会像我目前希望的那样容易,但否则它不会很有趣;-)
【问题讨论】:
-
你在哪里玩故事板?
-
我试图在 DataGrid 本身的 Loaded 事件中调用 ShowProgres.Begin() 但该方法不在范围内。
标签: silverlight xaml animation datagrid