2016-10-21 4 views
0

コントロールのスタイルが変更されたときに通知を受けるアプリケーションが必要です。私はWPFコントロールのスタイルが変更されたときにいくつかのアクションを行う必要があります。いくつかのイベントトリガを適用することも、通知することもできます。WPFコントロールのスタイルの通知が必要

最高のお礼

+0

「スタイルが変更されたとき」とはどういう意味ですか?コントロールのスタイルを動的に更新することはできないためです。トリガに基づいて一部のプロパティを更新することはできますが、新しいスタイルをコントロールに再割り当てすることはできません。 –

+0

[OnApplyTemplate](https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.onapplytemplate(v = vs.110).aspx)が必要な場合があります。コントロールのそのメソッドは、スタイルが設定されるたびに呼び出されます。 – gomi42

+0

@Evangelink任意のWPFコントロールの「スタイル」を何回でも変更できます(https://msdn.microsoft.com/en-us/library/ms745683(v = vs.110).aspx)あなたのXAMLまたはC#コードで。 – haindl

答えて

0

解決策はいくつかあります。あなたのC#コードのどこかで通知を受けるにしたい場合は

は、まず、あなたのコントロールのStyleプロパティに変更ハンドラを購読することができます:

DependencyPropertyDescriptor.FromProperty(Button.StyleProperty, typeof(Button)) 
    .AddValueChanged(btn, (s, e) => 
    { 
     // Style has changed. 
    }); 

(あなたが終わった後.RemoveValueChanged()を呼び出すことを忘れないでください。 )

もう1つの方法は、ソースパスをコントロールのStyleに設定してBindingを作成することです。バインディングターゲットは、たとえば、何らかのカスタムコントロール、または変更に対応したいViewModelなどです。または、これらのいずれかがない場合は、バインディングターゲットをTagプロパティに設定し、ValueConverterを使用してTag="{Binding Style, ElementName=btn, Converter={StaticResource MyStyleInterceptor}}"などのような変更を代行することができます。

Tagを不正使用したくない場合は、この目的のためにカスタムの添付プロパティを作成することもできます。

関連する問題