【问题标题】:Binding System.Windows.Media.Color to TextBlock.Foreground?将 System.Windows.Media.Color 绑定到 TextBlock.Foreground?
【发布时间】:2011-07-22 09:00:12
【问题描述】:

当我这样做时,我得到:

"无法创建默认转换器 之间执行“单向”转换 类型“System.Windows.Media.Color”和 'System.Windows.Media.Brush'。考虑 使用 Binding 的 Converter 属性。"

有人知道怎么做吗?

为什么 WPF 不能自动转换它,因为我使用的是 WPF 颜色,而不是 System.Drawing.Color。

编辑:

Xaml 代码:

<GridViewColumn Width="120" Header="Info">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock HorizontalAlignment="Center" Text="{Binding Info, Mode=OneWay}" Foreground="{Binding MessageColor, Mode=OneWay}"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

【问题讨论】:

  • 能否请您向我们展示您在其中设置颜色的 XAML?

标签: c# .net wpf xaml colors


【解决方案1】:

Brush 类型的默认 TypeConverter,不支持 Color(即使是 WPF 版本)。它只支持转换成字符串。

您必须创建一个自定义 IValueConverter,它接受一个颜色并返回一个 SolidColorBrush。

public class ColorToBrushConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (!(value is Color))
            throw new InvalidOperationException("Value must be a Color");
        return new SolidColorBrush((Color)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        throw new NotImplementedException();
    }

}

【讨论】:

  • 谢谢,写完这篇,我该怎么用呢?是在 xaml 中使用还是在 Color 属性(MessageColor)的实际代码中使用?
  • @Joan - 您可以在绑定中使用它,就像“{Binding MessageColor, Mode=OneWay, Converter={StaticResource ColorToBrushConverter}}”。您需要将 xmlns 添加到您的 CLR 命名空间,然后将 ColorToBrushConverter 作为资源添加到使用它的上方某处(即
  • 谢谢,但我找不到正确的命名空间。您是指 WPF 应用程序最重要的命名空间吗?因为使用它不起作用,我已经在 xaml btw 中定义了它。
  • @Joan - Here 就是一个例子。注意 xmlns:custom 如何映射到定义转换器的 CLR 命名空间?如果在同一个程序集中,程序集部分是可选的(即 xmlns:custom="clr-namespace:SDKSample")
  • 谢谢,它现在可以工作了,但我被概述 ColorToBrushConverter 的 xaml 编辑器愚弄了。但是当我编译它时它就消失了。它不应该知道我已经有类型吗?另外,您认为在哪里存储此类 WPF 应用程序转换器的最佳位置?
猜你喜欢
  • 1970-01-01
  • 2011-06-04
  • 2011-05-05
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多