1

SolidColorBrushXAML で色 ( ) を変更する方法を探しています。私は CSS / less をしばらくの間 ( less@github ) 使用してきましたが、1 つの色を RGB として保存し、同じ色を取得すると言う方法が気に入っていますdarken(@color1, 15%)が、少し暗いです。

そのようなコンバーターを XAML/C#.Net に適用する方法はありますか? (疑似 xaml) のようなもの:

<SolidColorBrush x:Key="darkRed" 
                 Color="{StaticResource Red, Converter=Darken}" />

編集: sa_ddamの答えは、私が必要としているものです。しかし - で使用すると機能しませんResourceDictionary

sa_ddam のコードは機能しますが、次のコードは機能しません。

<Window.Resources>

    <cnv:DarkenColorConverter x:Key="Darken" />

    <SolidColorBrush x:Key="blue"
                     Color="Blue" />

    <SolidColorBrush x:Key="darkblue"
                     Color="{Binding Source={StaticResource blue}, Converter={StaticResource Darken}}" />

</Window.Resources>

編集: 私の間違いが見つかりました-コンバーターの戻り値の型は、Colorではなく、でなければなりませんSolidColorBrush

4

1 に答える 1

4

IValueConverter色を暗くするためにを作成することができます

このような何かがトリックを行う必要があります

public class DarkenColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double percentage = 0.8; // Default 
        if (value is SolidColorBrush)
        {
            if (parameter != null)
            {
                double.TryParse(parameter.ToString(), out percentage);
            }
            Color color = (value as SolidColorBrush).Color;
            return new SolidColorBrush(Color.FromRgb((byte)(color.R * percentage), (byte)(color.G * percentage), (byte)(color.B * percentage)));
        }
        return value;
    }

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

使用例は次のとおりです

<Window x:Class="WpfApplication13.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication13"
        Title="MainWindow" x:Name="UI" Width="124" Height="336"
    >
    <Window.Resources>
        <!-- Converter -->
        <local:DarkenColorConverter x:Key="Darken" />

        <!-- Brush to manipulate -->
        <SolidColorBrush x:Key="red" Color="{Binding Source=Red}"  />
    </Window.Resources>

    <StackPanel>
        <!-- Original color -->
        <Rectangle Fill="{StaticResource red}" Width="100" Height="100" />

         <!-- Darken with Converter -->
        <Rectangle Fill="{Binding Source={StaticResource red}, Converter={StaticResource Darken}}" Width="100" Height="100"/>

        <!-- Using ConverterParameter to select how dark (0.0 - 1.0) -->
        <Rectangle Fill="{Binding Source={StaticResource red}, Converter={StaticResource Darken}, ConverterParameter=0.5}" Width="100" Height="100"/>
    </StackPanel>
</Window>

結果:

ここに画像の説明を入力してください

于 2013-03-02T09:50:34.800 に答える