我想將Brush
對象轉換爲Color
,以便在按鈕單擊時將任何xaml按鈕背景顏色更改爲其light color
,但System.Windows.Forms.ControlPaint.Light()
僅將顏色作爲參數。將畫筆轉換爲顏色
是否有一些替代方案來實現這一目標?
我想將Brush
對象轉換爲Color
,以便在按鈕單擊時將任何xaml按鈕背景顏色更改爲其light color
,但System.Windows.Forms.ControlPaint.Light()
僅將顏色作爲參數。將畫筆轉換爲顏色
是否有一些替代方案來實現這一目標?
您不需要參考巨大的Windows.Forms
dll 只需即可減輕Color
。簡單而言,你只是相同的因子乘以每個值:
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();
@downvoter我不介意,如果它帶有「爲什麼」? – Joel
你的意思是'System.Windows.Media.Brush'或'System.Drawing.Brush'嗎?此外,我會看看'System.Drawing.Color.FromArgb()' – davidsbro
@davidsbro System.Windows.Media.Brush –
請注意,如果它實際上是一個'SolidColorBrush',它具有'Color'屬性。 – Benjol