我正在处理从按钮派生的自定义控件,我有2列定义列0设置为网格长度*,列1设置为自动。 第0列中有一些控件并且工作正常,第1列有一个宽度设置为0的网格,这都是在控件模板中设置的。 我制作的自定义控件有几个我放入的依赖属性,其中一个是bool类型,例如IsShowingInfoPlane,默认值为false,id就像在第1列宽度的网格上附加一个双动画到这个依赖属性所以如果它的true运行动画从0到150,如果它的假运行从150到0,那么在第1列中,默认值为0。 我确定我必须沿着数据触发路线走,因为样式不接受动画。
这是按钮的依赖属性
public bool IsShowingInfoPlane
{
get { return (bool)GetValue(IsShowingInfoPlaneProperty); }
set
{
SetValue(IsShowingInfoPlaneProperty, value);
OnPropertyChanged("IsShowingInfoPlane");
}
}
这里是我试图附加到第1列中网格的数据触发器,我希望在其宽度属性上设置动画
<Grid.Triggers>
<DataTrigger Binding="{TemplateBinding IsShowingInfoPlane}" Value="True" >
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.150" From="{Binding ElementName=InfoGrid, Path=Width}" To="150" Storyboard.TargetProperty="Width" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Grid.Triggers>
由于我将在前端设置许多这些按钮,我不想创建单独的动画,因为我用这个按钮到目前为止,我不能去使用其他人控制。 我已经在程序的其他地方使用了动画并取得了成功,但这是我第一次尝试将它们与触发器一起使用,通常我可以从代码中将它们附加到某些控件上, 任何帮助将不胜感激。
此致
答案 0 :(得分:0)
你无法绑定From&amp;对于Storyboard中的属性,Storyboard必须是freezable。
无论如何,你需要一个EnterAction(就像你一样)来处理True值,并且需要一个ExitAction来表示False值。
请记住,故事板一旦启动就不会停止,直到你说要停止(如果我错了,请纠正我)。您需要在EnterAction中的Storyboard的ExitAction中添加一个StopStoryboard来停止它(同样的事情,你需要在你的ExitAction中的故事板的EnterAction中添加一个StopStoryboard)。
XAML看起来像这样(没有测试代码):
<Grid.Triggers>
<DataTrigger Binding="{TemplateBinding IsShowingInfoPlane}" Value="True" >
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="SbExitAction"/>
<BeginStoryboard x:Name="SbEnterAction">
<Storyboard>
<DoubleAnimation Duration="0:0:0.150" From="0" To="150" Storyboard.TargetProperty="Width" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="SbEnterAction"/>
<BeginStoryboard x:Name="SbExitAction">
<Storyboard>
<DoubleAnimation Duration="0:0:0.150" From="150" To="0" Storyboard.TargetProperty="Width" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Grid.Triggers>