【问题标题】:WPF Custom Color MarkupExtension cannot be applied on SolidColorBrush.ColorWPF 自定义颜色 MarkupExtension 不能应用于 SolidColorBrush.Color
【发布时间】:2018-08-31 02:16:51
【问题描述】:

我正在尝试实现 MarkupExtension 以将 rgba int 值转换为 System.Windows.Media.Color。

但是我得到了一个例外

An object of the type "UIH:Color" cannot be applied to a property that expects the type "System.Windows.Media.Color"

这里是实现:

[MarkupExtensionReturnType(typeof(System.Windows.Media.Color))]
public class Color : MarkupExtension
{
    public static explicit operator System.Windows.Media.Color(Color color)
    {
        return color.ToColor();
    }

    public byte R { get; set; }

    public byte G { get; set; }

    public byte B { get; set; }

    public byte? A { get; set; }

    public System.Windows.Media.Color ToColor()
    {
        if (A.HasValue)
        {
            return System.Windows.Media.Color.FromArgb(A.Value, R, G, B);
        }
        else
        {
            return System.Windows.Media.Color.FromRgb(R, G, B);
        }
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return ToColor();
    }
}

然后我将颜色应用到solidcolorbrush

<uih:Color x:Key="background" R="79" G="113" B="133" />

<SolidColorBrush x:Key="backgroundBrush" Color="{StaticResource background}" options:Freeze="True" />

【问题讨论】:

  • 这毫无意义。您可以像这样在 XAML 中创建 System.Windows.Media.Color 资源:&lt;Color x:Key="background" R="79" G="113" B="133"/&gt;
  • 我一直以为只能用inline #FFFFFF作为颜色声明
  • 另外说明,如果您只想在 XAML 中创建类的实例,则该类不需要是 MarkupExtension。然而,它应该有一个无参数的构造函数。

标签: c# wpf xaml markup-extensions


【解决方案1】:

问题在于您只是使用了错误的语法。它不是你需要的静态资源,而是标记扩展语法:

<SolidColorBrush x:Key="backgroundBrush" Color="{uih:Color R=79, G=113 ,B=133}" />

这应该可以解决问题;)

编辑

如果您想重用 Color,那么正如@Clemens 指出的那样,您根本不需要标记扩展或新类,只需声明一个 Color 资源:

<Color x:Key="Color" R="79" G="113" B="133"/>
<SolidColorBrush x:Key="backgroundBrush" Color="{StaticResource Color}" />

【讨论】:

  • 使其内联确实有效,但我想单独定义颜色,以便我可以重复使用它
  • @RayTang 那么你不需要标记扩展。实际上你根本不需要你的 Color 类。
  • @RayTang 看到我的编辑。正如 Clemens 指出的那样,标记扩展不是您所需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2021-11-28
  • 2013-06-07
  • 2021-09-17
  • 2019-06-01
  • 1970-01-01
相关资源
最近更新 更多