クラスを継承するTextBox
クラスがあり、それを呼び出しますMyTextBox
Background
このクラスのデフォルト値を再定義したいと思います。
そこで私はそうする方法を探し、良い選択肢を見つけました: callBackgroundProperty.OverrideMetadata()
問題は:これをどこに置くことができますか?
でApp.OnStartup()
?醜くて実用的ではないので、それをクラスのコード ファイルに含めたいと思います。
クラスのコンストラクターで?例外があります:
PropertyMetadata は、タイプ 'MyTextBox' に対して既に登録されています。
(私には問題ないように思えます。これを完全に取得する理由を理解しています)
そこで、C# の静的コンストラクターについてもう一度調べてみました (以前はそれについて何も知りませんでした。残念です)。
ここに私のコードがあります:
public class MyTextBox : TextBox
{
static MyTextBox()
{
MyTextBox.BackgroundProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(App.Current.Resources["CustomBackgroundBrush"]));
}
}
今、私はこれにかなり満足していますが、マイクロソフトはそうではありません. つまり、コード分析機能を使用すると、次のようになります。
CA1810:参照型の静的フィールドをインラインで初期化します
したがって、私の質問:それについて何ができますか?
- 警告を無視しますか?>> 警告を無視したくない
- overrideMetadata メソッドへの呼び出しを移動しますか? >> したいのですが、どこですか?
どんなヒントでも歓迎します、ありがとう
編集:静的コンストラクターで言うごとに何も初期化していないため、この警告が表示される理由を完全には理解していないことを追加しますか?