我有以下 Brush 型別的 DependencyProperty。我正在嘗試為 PatternBrushProperty 設定默認值。
public Brush PatternBrush
{
get => (Brush)GetValue(PatternBrushProperty);
set => SetValue(PatternBrushProperty, value);
}
public static readonly DependencyProperty PatternBrushProperty =
DependencyProperty.Register("PatternBrush", typeof(Brush), typeof(MyCustomControl),
new UIPropertyMetadata(defaultPatternBrush));
private static SolidColorBrush defaultPatternBrush
= new((Color)ColorConverter.ConvertFromString("#C5D4E3"));
當我嘗試執行應用程式時,出現以下錯誤:
System.InvalidOperationException Message='#FFC5D4E3' 不是屬性“Color”的有效值。
我嘗試了不同的方法來指定默認畫筆,但沒有成功。
有沒有辦法在資源字典中參考 SolidColorBrush 來設定值?
uj5u.com熱心網友回復:
在注冊屬性之前宣告defaultPatternBrush為靜態欄位。readonly以下代碼對我來說很好用:
public partial class MyCustomControl : UserControl
{
private static readonly SolidColorBrush s_defaultPatternBrush =
new SolidColorBrush((Color)ColorConverter.ConvertFromString("#C5D4E3"));
public MyCustomControl()
{
InitializeComponent();
}
public Brush PatternBrush
{
get => (Brush)GetValue(PatternBrushProperty);
set => SetValue(PatternBrushProperty, value);
}
public static readonly DependencyProperty PatternBrushProperty =
DependencyProperty.Register(nameof(PatternBrush), typeof(Brush), typeof(MyCustomControl),
new PropertyMetadata(s_defaultPatternBrush));
}
uj5u.com熱心網友回復:
您實際上是在嘗試將 aColor轉換為 a SolidColorBrush,請嘗試以下操作:
private static SolidColorBrush defaultPatternBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#C5D4E3"));
此外,將畫筆存盤在這樣的靜態欄位中并不安全,因為您不能保證它會在初始化 PatternBrushProperty 之前被初始化(實際上,在您發布的代碼中,它可能不會除非您先宣告 defaultPatternBrush)。將其改為靜態方法:
private static SolidColorBrush defaultPatternBrush => new SolidColorBrush((Color)ColorConverter.ConvertFromString("#C5D4E3"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489036.html
