【问题标题】:Changing style for individual item in ListBox programmatically以编程方式更改 ListBox 中单个项目的样式
【发布时间】:2014-07-31 13:07:31
【问题描述】:

我看到了一些更改列表框中所选项目的颜色和画笔的示例

我想知道是否有一种方法可以根据我们代码中的事件来更改列表框中项目的视觉属性

<ListBox.ItemTemplate>
   <DataTemplate>
      <StackPanel Name="spSceneThumb" Width="110">
          <Border BorderThickness="1" Background="#FFfcfcfc" BorderBrush="#aaaaff" >
               <StackPanel></StackPanel>
          </Border>
      </StackPanel>
  </DataTemplate>
</ListBox.ItemTemplate>

假设我想根据某些事件更改第 5 项的边框颜色

我尝试了 IValueConverter 但更改属性不会影响边框颜色

【问题讨论】:

    标签: c# wpf silverlight listbox


    【解决方案1】:

    您可以声明一个自定义的RoutedEvent,您可以使用EventTrigger 收听。您可以在 MSDN 上的 How to: Create a Custom Routed Event 页面中了解如何声明自定义 RoutedEvent。创建后,您可以在事件名称之前使用类名称来引用您的自定义事件,并且不要忘记您为声明它的命名空间定义的 XAML 命名空间前缀。像这样的:

    RoutedEvent="YourNamespacePrefix:YourClassName.YourEventName"
    

    但是,使用 EventTrigger 更改像 Brushes 这样的离散值并不是那么简单。您必须使用 StoryboardDiscreteObjectKeyFrame 元素。你可以试试这样的:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-31
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      相关资源
      最近更新 更多