这是在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>
但它不起作用,当我将鼠标悬停在它上面时,边框不会改变颜色。
我做错了什么?
感谢。
答案 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。