我有一个用户控件的样式:
<Style x:Key="AddServerPanel" TargetType="{x:Type uc:AddServer}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.2" From="252,550,26,0" To="252,248,26,0" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="Visibility" Value="Hidden">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.2" From="252,248,26,0" To="252,550,26,0" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
当我点击按钮时,我在后台隐藏了一个用户控件。我想要一个幻灯片并滑出动画。此代码已经可用于滑入但滑动不能正常工作,因为控件刚刚消失。我认为这是因为visibility属性应用于控件,然后调用触发器。如何修复此行为以使控件具有适当的“滑出”效果?
修改
我更改了代码并切换到DataTrigger。 但这是有效的,但我只是在Binding属性值为false时看到动画。这真的很好奇。 同样很高兴知道如何将ThicknessAnimation中的“From”属性设置为控件的当前边距。
<uc:AddServer x:Name="AddServerPanel" Height="300" Width="570" Margin="252,550,26,0">
<uc:AddServer.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AddServerPanelVisible}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:2" From="252,550,26,0" To="252,248,26,0" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=AddServerPanelVisible}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:2" From="252,248,26,0" To="252,550,26,0"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</uc:AddServer.Style>
</uc:AddServer>
答案 0 :(得分:1)
如果您使用动画显示/隐藏控件,则可能是在操纵所述控件的不透明度。如果是这种情况,您可以在代码中开始Storyboard,并在完成后将visibility标志设置为true。这将首先运行动画,然后设置可见性。
但是。我应该指出,因为你已经通过不透明度隐藏了控件,所以在这一点上没有必要改变它的可见性。
另一种选择是设置可见性标志(不绑定到控件的可见性属性),当标志值更改时,启动相应的Storyboard(例如,如果flag为true,则显示控件或开始显示动画)
我还想解释为什么你现在所做的事情。
每当你设置一个触发器时,你就告诉控件在属性等于这样的值时做某事。发生的事情是控件首先隐藏,当隐藏可见性时,它才会启动隐藏动画。唯一的问题是......它已经隐藏了!这就是我的解决方案所在;)
修改强>
实现了您的动画效果,而不是不透明度。在任何一种情况下,控件在开始动画之前总是被隐藏,这就是问题所在。
<强>解决方案强>
以下是一个例子:
<DataTrigger Binding="{Binding IsVisible}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<!-- Fade in animation -->
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<!-- Fade out animation -->
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
IsVisible
是您必须定义的标志。其余的很简单。