11

wpf アプリケーションを開発しています。私は C# で Color オブジェクトのインスタンスを持っています。赤い Color オブジェクトのインスタンスがあるColor c = Color.FromArgb(255,255,0,0)とします。つまり、1 から 10 の範囲の 1 つの値があるとします。この値に基づいて、「c」オブジェクトの色を変更したいとします。1 に明るい赤、10 に暗い赤が必要です。値が 1 から増加すると、明るい赤が暗くなります。wpf アプリケーションの C# でこれを行うにはどうすればよいですか? 上記の問題を解決できるコードまたはリンクを教えてください。

4

5 に答える 5

11

赤、緑、青のコンポーネントに係数を単純に掛けることができます。

public static Color ChangeLightness(this Color color, float coef)
{
    return Color.FromArgb((int)(color.R * coef), (int)(color.G * coef),
        (int)(color.B * coef));
}

または、係数の代わりに 1 から 10 までの整数値を使用したい場合:

private const int MinLightness = 1;
private const int MaxLightness = 10;
private const float MinLightnessCoef = 1f;
private const float MaxLightnessCoef = 0.4f;

public static Color ChangeLightness(this Color color, int lightness)
{
    if (lightness < MinLightness)
        lightness = MinLightness;
    else if (lightness > MaxLightness)
        lightness = MaxLightness;

    float coef = MinLightnessCoef +
      (
        (lightness - MinLightness) *
          ((MaxLightnessCoef - MinLightnessCoef) / (MaxLightness - MinLightness))
      );

    return Color.FromArgb(color.A, (int)(color.R * coef), (int)(color.G * coef),
        (int)(color.B * coef));
}
于 2012-10-15T11:32:01.030 に答える
2

設定された数の値がある場合、Style DataTrigger はどうですか?

https://www.google.co.uk/search?q=c%23+wpf+style+datatrigger

<Button>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding NameOfYourProperty}" Value="0">
                    <Setter Property="Background"
                            Value="#FF000000" />
                </DataTrigger>
                <DataTrigger Binding="{Binding NameOfYourProperty}" Value="1">
                    <Setter Property="Background"
                            Value="#FF110000" />
                </DataTrigger>
                <DataTrigger Binding="{Binding NameOfYourProperty}" Value="2">
                    <Setter Property="Background"
                            Value="#FF220000" />
                </DataTrigger>
                ( etc ... )
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

次に、スタイルを再利用する必要がある場合<Resources>は、window/usercontrol のセクションに入れることができます。

于 2012-10-15T11:27:38.057 に答える
1

よりクリーンな解決策は、2 つの長方形を並置することです。1 つは希望する色で、もう 1 つは黒です。

次に、黒い長方形で遊んでOpacity、下にある色を暗く/明るくします。

次のようになります。

<Grid>
   <Rectangle Fill="{Binding myColor}" />
   <Rectangle Fill="Black" Opacity="{Binding colorModifierPercentage}" />
</Grid>

もちろん、colorModifierPercentageは 0 から 1 の間の数値である必要があり、rectangle は任意のShapeにすることができます。

于 2012-10-15T13:11:01.967 に答える
1

の最小値1と最大値のスライダーを使用しているとします10。値に を掛けるだけです25.5 (255 / max value)。次に、その答えを最大値 (255) から引き、それを赤の値として使用します。

double newRedValue = 255 - (slider.Value * (255 / slider.Maximum));
int redValue = Convert.ToInt32(newRedValue);
Color c = Color.FromArgb(redValue ,255,0,0)

255 / slider.Maximum同じままである可​​能性が高いため、定数値に置き換えることができます。上記の式は逆の効果を生み出すため、スライダーの値が低いほど、赤の色合いが明るくなります。もちろん、値が 10 の場合は になるためred0赤のコンポーネントをそれほど低くしたくない場合は、そこに最小値を追加できます。

于 2012-10-15T11:31:38.693 に答える