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

时间:2013-12-17 18:02:31

标签: c# background runtime listboxitem data-driven

有很多人通过元数据编程提供着色答案,这种方法可以很好地进行颜色变化。但是,大多数人确实需要根据模型中的数据值进行着色。有人可以提供与

完全相同的c#示例代码片段
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" color="Red" />

并且可以在此上下文中调用

    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);
       }
    }

这将是最有帮助的。当然,元数据,XAML编程让Microsoft可以通过主题和操作系统平台更改重新着色或“更改”有关着色的大部分内容。但这对于需要以不同方式为每个ListBoxItem着色的应用程序不起作用,包括选择背景和前景变化。

更新:

可以使用以下代码

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

在选择和取消选择时,以编程方式实现样式更改并获得所需的行为。我现在想要了解的是,如何将XAML的触发器和属性与仅在列表框模型中的数据驱动这种行为联系起来。

0 个答案:

没有答案