我看到了一些用于更改ListBox中所选项目的颜色和画笔的示例
我想知道是否有办法根据代码中的事件更改列表框中项目的视觉属性
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Name="spSceneThumb" Width="110">
<Border BorderThickness="1" Background="#FFfcfcfc" BorderBrush="#aaaaff" >
<StackPanel></StackPanel>
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
假设我想根据某些事件更改第5项的边框颜色
我尝试过IValueConverter但是对属性的更改不会影响边框颜色
答案 0 :(得分:1)
您可以使用RoutedEvent
声明可以收听的自定义EventTrigger
。您可以在MSDN上的How to: Create a Custom Routed Event页面中找到如何声明自定义RoutedEvent
的方法。创建后,您可以使用事件名称前面的类名引用自定义事件,而不要忘记为声明它的命名空间定义的XAML命名空间前缀。像这样:
RoutedEvent="YourNamespacePrefix:YourClassName.YourEventName"
但是,使用Brush
更改EventTrigger
等离散值并非如此简单。您必须使用Storyboard
DiscreteObjectKeyFrame
元素。你可以尝试这样的事情:
<DataTemplate x:Key="Something">
<StackPanel Name="spSceneThumb" Width="110">
<Border Name="Border" BorderThickness="1" Background="#FFFCFCFC">
<StackPanel>
...
</StackPanel>
<Border.Resources>
<SolidColorBrush x:Key="EventBrush" Color="Red" />
</Border.Resources>
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="#FFAAAAFF" />
<Style.Triggers>
<EventTrigger RoutedEvent="Prefix:YourClassName.YourEventName">
<EventTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="Border"
Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{StaticResource EventBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.EnterActions>
</EventTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</StackPanel>
</DataTemplate>