想象一个wpf应用程序,我可以在其中动态更改主题。我通过在应用程序资源级别更换ResourceDictionaries来完成此操作。主题 - 资源词典为TextBox等定义了隐式样式。设置一个与主题风格不同的本地隐式风格/替代BasedOn DynamicResource
现在我在我的应用程序中的一部分,其中文本框应具有此特定样式“NonDefaultTextBoxStyle”,而不是应用程序范围内隐。
我很乐意这样做(使用DynamicResource因为主题可以在运行时更改):
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox" BasedOn="{DynamicResource NonDefaultTextBoxStyle}"/>
</StackPanel.Resources>
<TextBox .../>
<TextBox .../>
<TextBox .../>
</StackPanel>
,而不必这样做:
<StackPanel>
<TextBox Style="{DynamicResource NonDefaultTextBoxStyle}" .../>
<TextBox Style="{DynamicResource NonDefaultTextBoxStyle}" .../>
<TextBox Style="{DynamicResource NonDefaultTextBoxStyle}" .../>
</StackPanel>
我们简化了这一点,我有这样的想法,在StackPanel上设置一个可继承的附加属性,它将在每个后代文本框上设置指定的样式。
这是个好主意吗?有更简单的方法吗?我错过了什么吗?
这几乎可以归结为:什么是一个风格支持算法FMP替代=“{DynamicResource ...}
我只能建议你阅读的问题!你没有解决我的问题! – 2013-02-26 02:11:34
@MarkusHütter我现在看到你的问题。嗯,继续我的答案,你应该能够将我的解决方案中的附加解决方案属性更改为“FrameworkPropertyMetadataOptions.Inherits”(使用此http://msdn.microsoft.com/en-us/library/ms557296.aspx而不是' UIPropertyMetadata'),然后检查元素类型“StylesChanged”功能。然后附加的属性只需要在StackPanel元素上写入一次。 – NtscCobalt 2013-02-26 05:26:54
所以你的意思就像我已经提出的问题... – 2013-02-27 00:34:10