需要使用运行时值在WPF ListBoxItem上设置背景色的C#示例

需要使用运行时值在WPF ListBoxItem上设置背景色的C#示例,c#,background,runtime,listboxitem,data-driven,C#,Background,Runtime,Listboxitem,Data Driven,有很多人用元数据编程来提供颜色答案,对于简单的颜色变化来说,这种编程工作得很好。但是,大多数人确实需要根据模型中的数据值设置颜色。有人能提供一个c#示例代码片段,它与 <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" color="Red" /> 要影响样式更改,请在选择和取消选择时,编程并获得所需的行为。我现在试图理解的是,如何与XAML的触发器和属性相结合,以避免在listbox的模型

有很多人用元数据编程来提供颜色答案,对于简单的颜色变化来说,这种编程工作得很好。但是,大多数人确实需要根据模型中的数据值设置颜色。有人能提供一个c#示例代码片段,它与

     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" color="Red" />

要影响样式更改,请在选择和取消选择时,编程并获得所需的行为。我现在试图理解的是,如何与XAML的触发器和属性相结合,以避免在listbox的模型中只包含数据而导致这种行为。

不要创建自己的
ListBoxItem
派生类。把这些都拿走。你不需要那个。WPF在
ListBoxItem
类中已经有了一个
Background
属性以及更多内容。请参见,我需要根据每个ListBoxItem中的数据设置background属性。也就是说,列表中的每个项目都是不同的颜色,需要适当设置前景和背景选择颜色。我的观点仍然有效。为项目创建适当的视图模型,并最终使用
Style.Triggers
根据基础数据触发颜色更改。在用WPF编写一行代码之前,先学习MVVM。WPF不是winforms。阅读我刚刚链接的MSDN文档。这种代码是不必要的。删除它。我要求对此进行合理的说明,因为我可以在需要时使用HighlightBrushKey覆盖设置ListBoxItem的样式。在顶层使用更多的XAML,并加入属性来驱动触发器,这似乎是一个很大的开销。我看到你在这方面有很多很好的专业知识,我很欣赏你的见解。请详细说明如何使列表项中的静态数据值触发ListBoxItem的适当样式触发器,以便在选择时更改其样式。@HighCore yes..请提供一个带有良好起点的答案源代码和一些操作链接 public class MyItem : ListBoxItem { public override void OnSelected( RoutedEventArgs e ) { base.OnSelected( e ); Foreground = someBoolean ? Brushes.White: Brushes.Black; Code_To_Coerce_HighlightBrushKey_To_The_Correct_Color(Brushes.Red); } public override void OnUnSelected( RoutedEventArgs e ) { base.OnUnSelected( e ); Foreground = someBoolean ? Brushes.Red : Brushes.Black; Code_To_Coerce_HighlightBrushKey_To_The_Correct_Color(SystemColors.WindowBrush); } }
public class SiteDataItem : ListBoxItem {
    SiteInfo site;
    protected override void OnUnselected( RoutedEventArgs e ) {
        base.OnUnselected(e);
        Foreground = site.Enabled ? Brushes.Black : Brushes.Red;
        Style s = new Style(typeof(ListBox));
        theSiteList.Style = s;
    }

    protected override void OnSelected( RoutedEventArgs e ) {
        base.OnSelected(e);
        Foreground = site.Enabled ? Brushes.White : Brushes.White;
        if( site.Enabled == false ) {
            Style s = new Style(typeof(ListBox));
            s.Resources.Add(SystemColors.HighlightBrushKey, Brushes.Red);
            theSiteList.Style = s;
        }
    } 
}