2016-10-21 39 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,您也可以为此创建自定义附加属性。