2017-09-28 31 views
0

私のカスタムコントロールのデフォルトスタイルはGeneric.xamlで定義されており、正常に動作しています。WPFでカスタムコントロールの暗黙的なスタイルを設定する

しかし、カスタムコントロールのスタイルを変更しようとすると、コントロールを組み込んだ場合と同じように何も起こりません。 App.xamlで、私は次のようにして私のコントロールの既定のスタイルを変更しようとしています:すべてが正常に動作します。このキーを使用してこのスタイルを上記のスタイルと参照キープロパティ:

<Style TargetType="{x:Type my:CustomControl}"> 
    <Setter Property="Background" Value="Red"/> 
</Style> 

私はXを設定した場合。

上記のスタイリング方法は、組み込みのコントロールでのみ機能し、カスタムコントロールでは機能しませんか、間違っていますか?カスタムコントロールのためのこのタイプのスタイリングを実現するための実行可能なソリューションはありますか?

更新 この場合、私のカスタムコントロールはSystem.Windows.Windowから派生しています。

+1

静的コンストラクタでDefaultStyleKeyProperty.OverrideMetadataを設定しているのですか、回避策を講じていますか? – shadow32

+0

"上記のスタイリング方法は、組み込みのコントロールでのみ機能し、カスタムコントロールでは機能しません..."いいえ、それは真実ではありません。おそらくあなたのコントロールの宣言で何か間違っていた。あなたもそれを示すべきです。 – Clemens

+0

Clemensのコメントに続いて、新しいプロジェクトで私のケースを再現しようとしました。 TextBoxから継承するカスタムコントロールを作成するとき、暗黙的なスタイル設定は正常に機能します。しかし、まったく同じ設定を使用してウィンドウから継承するようにコントロールを変更するだけでは(暗黙的なスタイリングは機能しません)他のコントロールとは対照的に、ウィンドウを基本クラスとして使用すると暗黙のスタイリングに問題がありますか? – user6836683

答えて

0

最終的に私のカスタムコントロールが動作するための暗黙のスタイリングができました。スタイルがコントロールに自動的に適用されないため、暗黙的なスタイル設定は派生コントロールでは機能しない可能性があります。これを達成するには、リソース参照を手動で設定する必要があります。私のカスタムコントロールは次のようになりました:

-1

はい、正しいです。カスタムコントロールにはGeneric.xamlが使用され、アプリケーション全体のリソース(組み込みコントロールのスタイルを含む)にはApp.xamlが使用されます。 App.xamlでカスタムコントロールのTargetTypeを指定しても機能しません。したがって、明示的なスタイル(x:Key)を使用するのが最も簡単な解決策です。

+0

これは間違っています。もちろん、Generic.xaml(通常はコントロールライブラリアセンブリ内)にデフォルトのコントロールスタイルがあり、App.xamlに別のデフォルトスタイルがあります。後者は自動的に前者に基づいています。 – Clemens

関連する問題