WPF XAML 网格可见性触发器
Posted
技术标签:
【中文标题】WPF XAML 网格可见性触发器【英文标题】:WPF XAML Grid Visibility Trigger 【发布时间】:2013-09-23 18:44:08 【问题描述】:我在网格的第一行有一条状态消息,我希望它在可见性变化时滑入和滑出。 第一个可见性触发器效果很好,可以快速打开第一个网格行。一旦我添加了“折叠”触发器,就什么都没有了。当可见性设置为折叠时,如何反转动画以滑动关闭?
<Grid Grid.Row="0" Height="55" Visibility="Binding StatusMessageVisibility, Mode=TwoWay">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="55" Duration="0:0:.1" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="Visibility" Value="Collapsed">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="55" To="0" Duration="0:0:.1" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TextBlock Text="Hi There" />
</Grid>
【问题讨论】:
【参考方案1】:您应该删除网格中的Visibility
绑定并使用绑定到StatusMessageVisibility
属性的DataTrigger
。如果你绑定网格的可见性,那么一旦它被折叠,它就会被折叠,你将无法看到动画。
另外,不要使用两个带有EnterActions
的数据触发器,而是使用一个同时具有ExitAction
的数据触发器来表示折叠状态:
<Grid Grid.Row="0" Height="55">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="Binding StatusMessageVisibility" Value="Visible">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="55" Duration="0:0:.1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="55" To="0" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TextBlock Text="Hi There" />
</Grid>
【讨论】:
在我的情况下,默认情况下必须折叠网格,但如果我从网格中删除绑定,它总是可见或总是折叠,这取决于我如何在网格上初始化 Visibility 并且数据触发器永远不会启动。似乎 datatrigger 不更新网格可见性。我能做什么? 似乎 datatrigger 不更新网格可见性以上是关于WPF XAML 网格可见性触发器的主要内容,如果未能解决你的问题,请参考以下文章