为什么下面的XAML会导致堆栈溢出异常与一些主题?WPF样式导致循环
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ExpressionLight.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="BaseButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Margin" Value="5"/>
</Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource BaseButtonStyle}"/>
</ResourceDictionary>
</Application.Resources>
我已经尝试了在互联网上发现的几个主题,其中约一半导致异常。
是否有另一种方法将默认名称为Style
?
编辑:
的问题是,Theme
添加默认样式的资源字典(名称为System.Windows.Control.Button
的条目)。由于字典只能包含每个键的单个条目,因此无法在同一资源字典中添加新的默认值。
不知道为什么会导致“stackoverflow”而不是“重复键”异常。这可能是因为可以包含重复键的合并字典的特殊处理。
的解决方案是应用命名Style
默认代码:
void AppStartup(object sender, StartupEventArgs args) {
this.Resources[typeof(Button)] = this.Resources["BaseButtonStyle"];
....
}
由于BaseButtonStyle
被staticly绑定到它当然不可能在运行时使用此解决方案来改变主题的主题。
对不起,但我不明白。在这种情况下什么是“以前的风格”? – adrianm 2009-11-21 06:25:58
仍然不明白。你能告诉我如何创建一个扩展主题风格的命名风格?然后使命名样式为默认。 – adrianm 2009-11-21 14:11:11
我再次检查了您的代码,然后为您编辑了我的答案,您可以检查答案中的“编辑”部分。 – viky 2009-11-21 15:57:22