绑定SolidColorBrush的颜色并使用转换器更改它

时间:2018-03-03 07:09:24

标签: wpf mvvm

列表视图的itemtemplate中有一个边框,如下所示:

  <ListView.ItemTemplate>
                <DataTemplate>
                    <Border  >
                        <Border.Background>

                            <SolidColorBrush Color="{Binding Path=IsTrue, Converter={StaticResource ResourceKey=ColorConventer}}" Opacity="0.2">

                            </SolidColorBrush>
                        </Border.Background>
</Border>

bool to color converter:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            try
            {
                if (value != null)
                {
                    switch ((bool)value)
                    {
                        case true:
                            //return System.Windows.Media.Brushes.Red;
                            return new SolidColorBrush(Colors.Red);
                        case false:
                            return  new SolidColorBrush(Colors.White);
                    }
                }
            }
            catch { }
            return value;
        }

调用ColorConventer但不更改SolidColorBrush的颜色。 任何人都可以帮忙,原因是什么?

1 个答案:

答案 0 :(得分:2)

您无法将SolidColorBrush的Color属性绑定到另一个SolidColorBrush。更改转换器,使其返回颜色:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value is bool)
    {
        return (bool)value ? Colors.Red : Colors.White;
    }

    return value;
}

使用原始转换器,您可以编写背景绑定,如下所示:

<Border Background="{Binding Path=IsTrue, Converter={StaticResource ColorConventer}}" />

但是从转换器返回的SolidColorBrush必须设置其不透明度,例如像这样:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    if (!(value is bool))
    {
        return value;
    }

    return new SolidColorBrush
    {
        Color = (bool)value ? Colors.Red : Colors.White,
        Opacity = 0.2
    };
}