Brush
オブジェクトをColor
に変換して、ボタンのクリックでxamlボタンの背景色を_light color
_に変更できるようにしますが、System.Windows.Forms.ControlPaint.Light()
は引数としての色。
これを達成するための代替手段はありますか?
Color
を軽量化するために、巨大なWindows.Forms
dll justを参照する必要はありません。簡単に言うと、各値に同じ係数を掛けるだけです。
private Color AdjustBrightness(double brightnessFactor)
{
Color originalColour = Color.Red;
Color adjustedColour = Color.FromArgb(originalColour.A,
(int)(originalColour.R * brightnessFactor),
(int)(originalColour.G * brightnessFactor),
(int)(originalColour.B * brightnessFactor));
return adjustedColour;
}
もちろん、これはいくつかの方法で改善される可能性があります(そうすべきです)が、あなたはそのアイデアを理解します。実際、値が255を超えるとException
がスローされますが、きちんと対処できると確信しています。次に、明るくする必要があるBrush
のタイプを確認するだけです。
if (brush is SolidColorBrush)
return new SolidColorBrush(AdjustBrightness(((SolidColorBrush)brush).Color));
else if (brush is LinearGradientBrush || brush is RadialGradientBrush)
{
// Go through each `GradientStop` in the `Brush` and brighten its colour
}
ブラシのA、RGB値を取得してから、それらをSystem.Drawing.Color.FromARGB()
疑似コードに渡すことができます。
_Brush br = Brushes.Green;
byte a = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).A;
byte g = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).G;
byte r = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).R;
byte b = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).B;
System.Windows.Forms.ControlPaint.Light(
System.Drawing.Color.FromArgb((int)a,(int)r,(int)g,(int)b));
_
私はWPFの専門家ではありませんが、心に留めておく必要があると思う主なことは、System.Drawing.Color.FromArgb()
またはSystem.Drawing.Color.FromName()
を使用することです。
私の場合、私はこれを次のように行いました(拡張メソッド):
_public static class BrushExtension
{
public static Color GetColor(this Brush brush)
{
return new Pen(brush).Color;
}
}
_
そしてColor brushColor = myBrush.GetColor();
のように呼び出します
これを試して:
Brush brush = Brushes.Yellow;
Color color = ((SolidColorBrush) brush).Color;