我有一个usercontrol,我想用作ListBoxItem。
<ListBox.ItemTemplate>
<DataTemplate>
<local:MyUserControl/>
</DataTemplate>
</ListBox.ItemTemplate>
我想在取消选择usercontrol时播放故事板。
<UserControl.Resources>
<Style TargetType="{x:Type UserControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}, Mode=FindAncestor}}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource OnMouseLeaveSB}"/>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
但故事板永远不会开火。有更好的方法吗?
编辑添加:
我真正想要实现这个目标:
当鼠标在UserControl上时,我想播放一个故事板(OnMouseEnterSB)。当鼠标离开UserControl时,我想播放另一个故事板(OnMouseLeaveSB)。我把这一切都搞好了。
然而,当选择UserControl并且鼠标离开时,我不想播放故事板。
最后,当取消选择UserControl时,我想播放OnMouseLeaveSB故事板。
答案 0 :(得分:1)
我没有WPF经验,而是我是Silverlgiht女孩,而在Silverlight中,你所描述的东西被称为“VisualStateManager”(只是将它绑定,它也可以在WPF中使用)。
使用VSM,您可以为(用户)控件的每个“状态”(鼠标悬停,鼠标左移,正常)定义不同的视觉外观,并且还可以根据前一个和/或下一个状态定义这些状态之间的不同过渡(或者您可以使用默认转换在所有不同状态之间移动)。
阅读Tim Heuer的this博客文章。用很多截图来描述它:)。您可能还想查看此link。
使用VSM,状态和动画是控件的一部分,而不是具有一堆事件处理程序和animation.Begin()调用的应用程序。我非常喜欢并推荐它:)
答案 1 :(得分:1)
如果我理解你的问题,你想在任何ListViewItem失去选择时播放这个动画'OnMouseLeaveSB'。但是在触发器中,您正在为所有未选择的项目播放动画。因此,即使这样有效,也不会是你想要的那个。
故事板无法触发的原因是默认的BlueHighlight会隐藏您的动画。解决这个问题的方法是设置边框颜色,这里解释www.HereIsYourLink.com
要实现您的目标,您必须在Trigger.ExitActions中插入故事板,其中IsSelected值为“True”。
如果你不赶时间,请看看VSM。