Wpf UserControl作为ListBoxItem和IsSelected

Wpf UserControl作为ListBoxItem和IsSelected,wpf,xaml,expression-blend,Wpf,Xaml,Expression Blend,我有一个usercontrol,我想用作ListBoxItem <ListBox.ItemTemplate> <DataTemplate> <local:MyUserControl/> </DataTemplate> </ListBox.ItemTemplate> 我想在未选中usercontrol时播放情节提要 <UserControl.Resources> <

我有一个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情节提要

我没有WPF经验,我是一个Silverlight女孩,在Silverlight中,您描述的东西被称为“VisualStateManager”(刚刚开始,WPF中也提供了它)

使用VSM,您可以为(用户)控件的每个“状态”(鼠标悬停、鼠标悬停、正常)定义不同的视觉外观,还可以根据上一个和/或下一个状态定义这些状态之间的不同转换(或者您可以使用默认转换在所有不同状态之间移动)

阅读Tim Heuer的博客文章。用许多截图很好地描述了它:)。你可能还想看看这个


使用VSM,状态和动画是控件的一部分,而不是具有一系列事件处理程序和animation.Begin()调用的应用程序。我非常喜欢并推荐它:)

如果我正确理解您的问题,当任何ListViewItem失去选择时,您希望播放此动画“OnMouseLeaveSB”。但在触发器中,您正在播放所有未选定项的动画。因此,即使这样做有效,它也不会是你想要的

故事板不启动的原因是默认的BlueHighlight隐藏了动画。解决这个问题的一个方法是设置边框颜色,这里解释了这一点

要实现您想要的,您必须在Trigger.ExitActions中插入故事板,并使用IsSelected值“True”


如果您不着急,也可以看看VSM。

谢谢您的回答。我忘了说,我实际上已经注意到了边框的颜色和一切。问题更多的是事件的顺序,以及控制哪一个在哪个时间播放。VSM正是我需要的谢谢。VSM正是我所需要的。我见过它几次,但从来没有注意过它到底是什么。你是如何在你的
UserControl
中获得
IsSelected
属性的,你能帮我吗