色の値を取り、指定された量だけ 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 の最初の 2 つの SolidColorBrush 行を指しています。これを修正し、デザイナーにプレビューを適切に更新させる方法についてのアイデアはありますか?