DefaultStyle
s包含所有TextBox
es的DefaultStyle
:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
Resources.MergedDictionaries.Add(new DefaultStyles());
InitializeComponent();
}
}
然后是Xaml,我继承了样式并添加了更多:
<UserControl.Resources>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Green "/>
</Style>
</UserControl.Resources>
这会抛出一个StackOverFlowException
,因为找不到我的DefaultStyle
,所以它尝试自引用。
为什么样式在合并词典中看不到默认样式
它看不到它,因为它本质上是在替换它。InitializeComponent
方法调用将用您在XAML中定义的字典替换您在ctor中引用的字典。
基本上,你做错了。为什么你不能这么做:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DefaultStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
...
</Style>
</ResourceDictionary>
</UserControl.Resources>