有很多人通过元数据编程提供着色答案,这种方法可以很好地进行颜色变化。但是,大多数人确实需要根据模型中的数据值进行着色。有人可以提供与
完全相同的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的触发器和属性与仅在列表框模型中的数据驱动这种行为联系起来。