wpf - 绑定(bind) SolidColorBrush 的颜色并使用转换器更改它

标签 wpf mvvm

ListView 的 itemtemplate 内有一个边框,如下所示:

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

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

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


bool 到颜色转换器:
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 的颜色没有改变。
任何人都可以帮忙,这是什么原因?

最佳答案

您无法绑定(bind) Color SolidColorBrush 的属性到另一个 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;
}

使用您的原始转换器,您可以像这样编写背景绑定(bind):
<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
    };
}

关于wpf - 绑定(bind) SolidColorBrush 的颜色并使用转换器更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49081676/

相关文章:

c# - 如何使用C#创建DataTemplate并设置子控件的资源?

wpf - 我们可以移动 Grid Splitter On Left 就像我们在 wpf 中单击按钮时拖动它一样吗?

wpf - 在 ViewModel PropertyChanging/PropertyChanged 上触发动画

具有多窗口处理的 WPF + MVVM

c# - 我可以同时使用 PropertyChanged 和 LostFocus 吗?

ios - 添加编程 View 而不是 Storyboard 后出现意外的 nil

c# - 如何正确使用DataBinding、INotifyPropertyChanged、ListViewGridView

html - 在 WebBrowser WPF 中查看启用 MVC 防伪造的网页

wpf - 为每个网格行分配边框

wpf - 当不是数据上下文时绑定(bind)到窗口 View 模型属性