什么是被选中的'版本的颜色

时间:2015-03-25 12:31:31

标签: wpf

我有一个应用程序,用户希望我根据他定义的某些状态为表中的某些行着色。 他目前选择了5种颜色

  • 红色
  • 绿色
  • 蓝色
  • 黄色
  • 褐色

但我猜这个列表可以扩展。 我使用cellstyle来应用这种颜色,这是有效的 但我希望用户能够通过使用另一种直观上属于基色的颜色来选择行时能够看到差异。 因此,具有相同状态的2行表示红色,但是其中一行被选中,则所选行应该具有选择红色的颜色'。 我该怎么做? 添加R G和B的10个单位?有某种标准吗? 如何选择红色'从红色,以这种方式,我可以将这个概念应用于任何颜色。

2 个答案:

答案 0 :(得分:0)

您持有三个RGB之一,然后更改另外两个并保持比率相同。实际上,没有一定数量的移动其他两个。而你必须选择哪一个。我认为使用色轮来挑选颜色会更容易。

答案 1 :(得分:0)

这样的事情怎么样: 我有State类的颜色信息和Model类,它们有状态信息:

public class State
{
    public int ID { get; set; }
    public System.Drawing.Color Color { get; set; }

    public State(int id, Color color)
    {
        ID = id;
        Color = color;
    }

    public override string ToString()
    {
        return ID.ToString();
    }
}
public class Model
{
    public string Name { get; set; }
    public State State { get; set; }

    public Model(string name, State state)
    {
        Name = name;
        State = state;
    }
}
在视图模型中

public MainViewModel()
    {
        Items = new List<Model>() { 
            new Model("item1", new State(1, Color.Red)), 
            new Model("item2", new State(1, Color.Red)), 
            new Model("item3", new State(2, Color.Green)) 
        };
    }

并查看:

<Window.Resources>
    <local:StateToColorConverter x:Key="StateToColorConverter"/>
    <local:SelectedColorConverter x:Key="SelectedColorConverter"/>

    <Style TargetType="DataGridCell">
        <Setter Property="Background" Value="{Binding State.Color, Converter={StaticResource StateToColorConverter}}"/>

        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="{Binding State.Color,Converter={StaticResource SelectedColorConverter}}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <DataGrid ItemsSource="{Binding Items}"/>
</Grid>

最后转换器: StateToColor:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var color = (System.Drawing.Color)value;
        return new SolidColorBrush(System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B));
    }

SelectedColor:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var newColor = ControlPaint.Light((System.Drawing.Color)value);
        return new SolidColorBrush(System.Windows.Media.Color.FromArgb(newColor.A, newColor.R, newColor.G, newColor.B));
    }

根据具有状态的颜色,使选择的颜色变浅。