2016-10-21 87 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控件的'Style' [儘可能多次](https://msdn.microsoft.com/en-us/library/ms745683(v = vs.110).aspx)在你的XAML或C#代碼中。 – haindl

回答

0

有幾種可能的解決方案。

首先,你可以訂閱一個變化處理程序控件的屬性Style如果想在你的C#代碼某處通知:

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

(不要忘了打電話.RemoveValueChanged()大功告成了。 )

另一種方法是創建一個Binding,其源路徑設置爲您的控件的Style。綁定目標例如可以是某種自定義控件或您想要對更改作出反應的ViewModel。或者,如果您沒有任何可用的資源,則可以將綁定目標設置爲Tag屬性,並使用ValueConverter來攔截使用類似Tag="{Binding Style, ElementName=btn, Converter={StaticResource MyStyleInterceptor}}"之類的更改。

如果您不想濫用Tag,您也可以爲此創建自定義附加屬性。