如何处理在WPF中捕获的鼠标上的ListBoxItem样式触发器

时间:2010-11-08 14:30:33

标签: wpf templates styles mouseevent listboxitem

我有一个列表框,其中包含一些带有模板的项目。这些项目是在运行时创建的。当鼠标悬停在ListBoxItem上时,模板会触发缩放动画。我想在用户点击项目时更改项目的背景。下面的代码不起作用,因为我相信IsMouseCaptured(click)由列表框选择器处理。我有什么想法可以在XAML代码中完成这一切吗?

<ControlTemplate.Triggers>
        <Trigger Property="IsMouseCaptured" Value="True">
            <Setter TargetName="rec" Property="Fill" Value="Black" />
        </Trigger>    
</ControlTemplate.Triggers>

2 个答案:

答案 0 :(得分:1)

当用户点击列表框中的某个项目时,会选择该项目,因此您的触发器需要对IsSelected-Property进行操作。

为ListBoxItem创建一个样式,将Trigger放在IsSelected-Property上,并将该样式设置为ItemContainerStyle。

答案 1 :(得分:0)

正如Falcon所说,你可以将事件用于你的任务。这甚至可以完全在XAML中完成,如下所示:

<EventTrigger RoutedEvent="MouseDown" >
    <EventTrigger.Actions>                      
        <BeginStoryboard x:Name="ClickBackground">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames 
                    Duration="0" FillBehavior="HoldEnd"
                    Storyboard.TargetName="rec"
                    Storyboard.TargetProperty="Fill">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <SolidColorBrush Color="Black" />
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>                           
                </ObjectAnimationUsingKeyFrames>                                
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseUp" >
    <EventTrigger.Actions>                      
        <StopStoryboard BeginStoryboardName="ClickBackground" />
    </EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave" >
    <EventTrigger.Actions>                      
        <StopStoryboard BeginStoryboardName="ClickBackground" />
    </EventTrigger.Actions>
</EventTrigger>