generic.xamlでデフォルトスタイルを設定するのとプログラム的に同等

オリバー

カスタムコントロール(つまり、System.Windows.Controlから派生したクラス)があり、デフォルトのスタイルを設定したいと思います。themes / generic.xamlを作成し、そこでスタイルを定義することで、それが可能であることを私は知っています。私は以前にそれをしました、そしてそれは働きます。

ただし、スタイルはかなり些細なものであるため(すばやくモックアップできるようにするための単なるダミーの長方形です)、デフォルトのスタイルをコードのみで定義して、クラス定義に近づけ、ファイルが乱雑にならないようにします。 generic.xaml。これは私がこれまでに行ったことです:

    static Trailer()
    {
        // just there to be able to test it alternatively with generic.xaml
        FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(Trailer), new FrameworkPropertyMetadata(typeof(Trailer)));

        // define the template with dummy geometry
        ControlTemplate DefaultTemplate = new ControlTemplate(typeof(Trailer));
        FrameworkElementFactory rectFact = new FrameworkElementFactory(typeof(Rectangle));
        rectFact.SetValue(Shape.FillProperty, new DynamicResourceExtension(SystemColors.ControlLightBrushKey));
        DefaultTemplate.VisualTree = rectFact;

        // define the style
        Style DefaultStyle = new Style {TargetType = typeof (Trailer)};
        Setter setter = new Setter();
        setter.Property = Control.TemplateProperty;
        setter.Value = DefaultTemplate;
        DefaultStyle.Setters.Add(setter);

        // register the style in application resources
        Application.Current.Resources.Add(typeof(Trailer), DefaultStyle);
    }

これは非常に単純なテストアプリケーションで機能しますが、コントロールが空のままである他のスタイル/テンプレート(デフォルトのコントロールスタイル)を使用したより複雑な設定では失敗します。干渉の原因を特定することはできませんが、上記のコードでコントロールのデフォルトスタイルを実際に設定していないことの証拠と見なします。

generic.xamlと同じ動作を実現するには、アプリケーションリソースにない場合、どこでスタイルを設定する必要がありますか?

オリバー

この問題について深く考え、依存関係のプロパティに関する私の(初心者の)知識を要約した後、私は簡単な解決策を見つけました。これは私が機能することが証明されています。交換する必要がありました

Application.Current.Resources.Add(typeof(Trailer), defaultStyle);

沿って

FrameworkElement.StyleProperty.OverrideMetadata(typeof(Trailer), 
    new FrameworkPropertyMetadata(defaultStyle));

これは、DependencyPropertyのデフォルト値を変更する公式の方法に他なりません。

私はすでにこの方向を考えていましたが、私の間違いは「DefaultStyleProperty」(DefaultStylePropertyKeyに対応する...)を見つけることを期待していたことでしたが、デフォルト値を変更するより簡単で自然な可能性については考えていませんでした私のクラスのStylePropertyの。

マイクロソフトのデザインが非常に論理的で注意深く作成されていることが再び判明したことを嬉しく思います(アーメン...)。

補遺: WPFインスペクターでビジュアルツリーを確認しました。generic.xamlを指定するか、上記のコードのみの方法を使用するかに関係なく、これらは同一です。

一貫性の追加機能として、私は追加しました

FrameworkElement.OverridesDefaultStyleProperty.OverrideMetadata(typeof(Trailer), 
    new FrameworkPropertyMetadata(true));

これにより、デフォルトのスタイルがgeneric.xamlからロードされないようにします。とにかく自分でスタイルを設定しているので、実際には違いはありません。ただし、これが望ましくない副作用を引き起こす可能性があるかどうかはわかりませんが、注意してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Generic.xamlのDataTemplateをWPFカスタムコントロールに使用する

分類Dev

Ubuntuでファイルタイプを開くようにデフォルトのプログラムを設定することはできません

分類Dev

プログラムでxamlボタンにスタイルを設定すると失敗します

分類Dev

カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

分類Dev

私の目の前で答えますか?(Generic.Listには、Generic.IEnumerableエラータイプのモデルアイテムが必要です)

分類Dev

BasedOnを使用してGeneric.xamlのトグルボタンをテンプレート化する方法は?

分類Dev

Scalaシェイプレスライブラリで、製品タイプ(HList / Generic / NamedGeneric)をそのアリティに等しいintシングルトンタイプに変換するネイティブな方法はありますか?

分類Dev

Kibanaのデフォルトのインデックスパターンをプログラムで設定する

分類Dev

VHDLの「GENERIC定数」

分類Dev

Genericを派生させるレコードデータ型のフィールドの名前とタイプを一覧表示することは可能ですか?

分類Dev

特定のファイルタイプを開くようにデフォルトのプログラムを設定する方法

分類Dev

WPFカスタムコントロール-ビジュアルデザイナーでサポートされていないGeneric.xamlルート要素

分類Dev

後でファイルをフォルダに追加するときに、「プログラムとしてファイルの実行を許可する」をデフォルトとして設定します

分類Dev

ページの読み込み時にプログラムでjsliderのデフォルトポインタを設定する方法

分類Dev

ページの読み込み時にプログラムでjsliderのデフォルトポインタを設定する方法

分類Dev

Windowsエクスプローラーとコマンドラインでさまざまなデフォルトプログラムを設定する方法

分類Dev

Laravel:デフォルトオプションを設定するときにフォーム選択がスタイル/クラスで機能しない

分類Dev

Generic.xmlで別のカスタムコントロールを使用しているカスタムコントロールを作成できますか?

分類Dev

プログラムで共有設定のデフォルトを設定する

分類Dev

特定のフォルダで特定のファイルタイプを開くようにデフォルトのプログラムを設定するにはどうすればよいですか?

分類Dev

Ubuntu Nautilusのデフォルトのファイルの関連付けを[プログラムから開く]タブにリストされていないものに設定するにはどうすればよいですか?

分類Dev

Ubuntu Nautilusのデフォルトのファイルの関連付けを[プログラムから開く]タブにリストされていないものに設定するにはどうすればよいですか?

分類Dev

ファイルを開くダイアログのデフォルトの場所をプログラムの場所に設定する方法

分類Dev

アイテムタグとともにドロップダウンでデフォルト値を空白に設定する方法

分類Dev

ファイルを開くためのデフォルトプログラムとしてWindows10ストアアプリを設定できません

分類Dev

TextViewのテキストスタイルをTextAppearance.Appcompat ...にプログラムで設定する

分類Dev

OutlookプラグインでWindows8のデフォルトスタイル(Xaml)を使用する方法

分類Dev

カスタムデスクトップファイルを特定のファイルのデフォルトプログラムにする方法

分類Dev

Word 2010をWord文書のデフォルトプログラムとして設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    Generic.xamlのDataTemplateをWPFカスタムコントロールに使用する

  2. 2

    Ubuntuでファイルタイプを開くようにデフォルトのプログラムを設定することはできません

  3. 3

    プログラムでxamlボタンにスタイルを設定すると失敗します

  4. 4

    カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

  5. 5

    私の目の前で答えますか?(Generic.Listには、Generic.IEnumerableエラータイプのモデルアイテムが必要です)

  6. 6

    BasedOnを使用してGeneric.xamlのトグルボタンをテンプレート化する方法は?

  7. 7

    Scalaシェイプレスライブラリで、製品タイプ(HList / Generic / NamedGeneric)をそのアリティに等しいintシングルトンタイプに変換するネイティブな方法はありますか?

  8. 8

    Kibanaのデフォルトのインデックスパターンをプログラムで設定する

  9. 9

    VHDLの「GENERIC定数」

  10. 10

    Genericを派生させるレコードデータ型のフィールドの名前とタイプを一覧表示することは可能ですか?

  11. 11

    特定のファイルタイプを開くようにデフォルトのプログラムを設定する方法

  12. 12

    WPFカスタムコントロール-ビジュアルデザイナーでサポートされていないGeneric.xamlルート要素

  13. 13

    後でファイルをフォルダに追加するときに、「プログラムとしてファイルの実行を許可する」をデフォルトとして設定します

  14. 14

    ページの読み込み時にプログラムでjsliderのデフォルトポインタを設定する方法

  15. 15

    ページの読み込み時にプログラムでjsliderのデフォルトポインタを設定する方法

  16. 16

    Windowsエクスプローラーとコマンドラインでさまざまなデフォルトプログラムを設定する方法

  17. 17

    Laravel:デフォルトオプションを設定するときにフォーム選択がスタイル/クラスで機能しない

  18. 18

    Generic.xmlで別のカスタムコントロールを使用しているカスタムコントロールを作成できますか?

  19. 19

    プログラムで共有設定のデフォルトを設定する

  20. 20

    特定のフォルダで特定のファイルタイプを開くようにデフォルトのプログラムを設定するにはどうすればよいですか?

  21. 21

    Ubuntu Nautilusのデフォルトのファイルの関連付けを[プログラムから開く]タブにリストされていないものに設定するにはどうすればよいですか?

  22. 22

    Ubuntu Nautilusのデフォルトのファイルの関連付けを[プログラムから開く]タブにリストされていないものに設定するにはどうすればよいですか?

  23. 23

    ファイルを開くダイアログのデフォルトの場所をプログラムの場所に設定する方法

  24. 24

    アイテムタグとともにドロップダウンでデフォルト値を空白に設定する方法

  25. 25

    ファイルを開くためのデフォルトプログラムとしてWindows10ストアアプリを設定できません

  26. 26

    TextViewのテキストスタイルをTextAppearance.Appcompat ...にプログラムで設定する

  27. 27

    OutlookプラグインでWindows8のデフォルトスタイル(Xaml)を使用する方法

  28. 28

    カスタムデスクトップファイルを特定のファイルのデフォルトプログラムにする方法

  29. 29

    Word 2010をWord文書のデフォルトプログラムとして設定するにはどうすればよいですか?

ホットタグ

アーカイブ