章, 我有一个数据网格,并按如下所示给行着色。
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}" >
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Foreground" Value="Blue" />
<Setter Property="Background" Value="White" />
</Trigger>
<DataTrigger Binding="{Binding ErrorType}" Value="TerminalError">
<Setter Property ="Foreground" Value="Purple"/>
</DataTrigger>
<DataTrigger Binding="{Binding ErrorType}" Value="CriticalError">
<Setter Property ="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
当前颜色是硬编码的,我需要更改它。我有一个单例类,其中包含不同状态的颜色,并且可以通过以下方式访问颜色:
Color returnedColour = ColourSchemes.Instance.GetColour (CriticalError)
因此在xaml中,我有Value =“ Red”等,我希望改为从可全局访问的ColourSchemes对象获取名称。非常感谢任何智慧的话。
答案 0 :(得分:0)
首先,请确保使用“画笔”而不是“颜色”为属性(如“前景”或“背景”)分配值。
然后,您可以在ColourSchemes类中添加一个indexer属性,该属性将枚举值作为键:
public enum ErrorType
{
TerminalError, CriticalError
}
public class ColourSchemes
{
private readonly Dictionary<ErrorType, Brush> brushes =
new Dictionary<ErrorType, Brush>
{
{ ErrorType.TerminalError, Brushes.Orange },
{ ErrorType.CriticalError, Brushes.Red }
};
public Brush this[ErrorType value]
{
get { return brushes[value]; }
}
public static ColourSchemes Instance { get; } = new ColourSchemes();
}
现在您可以绑定这样的属性:
Background="{Binding Source={x:Static local:ColourSchemes.Instance}, Path=[CriticalError]}">
或者在二传手中:
<Setter Property="Background"
Value="{Binding Source={x:Static local:ColourSchemes.Instance}, Path=[CriticalError]}"/>
不过,您可能想看看Dynamic Resources。