不触发样式中定义的IsMouseOver事件

时间:2011-11-10 08:43:57

标签: c# wpf

这是在App.xaml<Application.Resources>中定义的:

<Style x:Key="borderStyle" TargetType="Border">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

我在Window1.xaml内部使用它:

<ListBox Name="listView1" ItemsSource="{Binding}" Background="Black" >
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"  Orientation="Horizontal" ItemWidth="150" ItemHeight="150" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Border BorderThickness="5" BorderBrush="DarkGray" Style="{StaticResource borderStyle}">
                            <Image  Width="120"  Height="120" Stretch="Fill"  Source="{Binding Image}" />
                         </Border>
                        <TextBlock FontFamily="Verdana"  Foreground="Orange"  Text="{Binding Title}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

但它不起作用,当我将鼠标悬停在它上面时,边框不会改变颜色。

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

如果直接在边框内定义属性,则覆盖触发器。

从此行中删除BorderBrush="DarkGray"

<Border BorderThickness="5" BorderBrush="DarkGray" Style="{StaticResource borderStyle}">

所以它看起来像这样

<Border BorderThickness="5" Style="{StaticResource borderStyle}">

并为您的风格添加一个setter

<Style x:Key="borderStyle" TargetType="Border">
    <Setter Property="BorderBrush" Value="DarkGray" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

作为一个拇指规则:所有应由触发器修改的属性都必须在样式中定义为setter。

相关问题