将自定义扩展名作为静态资源分配给Color属性

时间:2012-05-04 12:38:46

标签: wpf xaml

我创建了一个扩展,它接受一个颜色值并按指定的数量修改HSL值。以下是扩展的相关部分。

[MarkupExtensionReturnType(typeof(Color))]
internal class RelativeColor : MarkupExtension
{
    public Color BaseColor { get; set; }
    public float H { get; set; }
    public float S { get; set; }
    public float L { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        ColorHSL c = RGBtoHSL(BaseColor);
        c.H *= H == 0f ? 1f : H;
        c.L *= L == 0f ? 1f : L;
        c.S *= S == 0f ? 1f : S;
        return HSLtoRGB(c);         //Returns Color object
    }

    // Additional methods that converts between HSL and RGB
}

这是我在App.xaml中放入的XAML

<Style.Resources>
    <Extensions:RelativeColor x:Key="ButtonBackgroundColor" BaseColor="{StaticResource WorkspaceBackground}" L="1.18"/>
    <SolidColorBrush x:Key="ButtonBackground" Color="{StaticResource ButtonBackgroundColor}"/>
    <SolidColorBrush x:Key="ButtonBorder" Color="{StaticResource ButtonBackgroundColor}" />
    <SolidColorBrush x:Key="ButtonHoverBorder" Color="#B2B2B2" />
 </Style.Resources>

现在,在运行期间一切都很好,没有错误。但是,在设计时,XAML编辑器会抛出此错误:

Error   1   An object of the type "X.Extensions.RelativeColor" cannot be applied to a property that expects the type "System.Windows.Media.Color".  c:\...\app.xaml 18  62

这指向xaml中的前两个SolidColorBrush行。有关如何解决此问题的任何想法,并让设计师正确更新预览?

0 个答案:

没有答案