WPF Custom Color MarkupExtension не может быть применено к SolidColorBrush.Color - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь реализовать 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();
    }
}

И я применяю цвет к сплошной кисти

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

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

1 Ответ

0 голосов
/ 31 августа 2018

Проблема в том, что вы просто используете неправильный синтаксис. Вам нужен не статический ресурс, а синтаксис расширения разметки:

<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}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...