在UserControl中定义的资源.资源无法从代码中查看MergedDictionaries集合中定义的元素



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>

相关内容

  • 没有找到相关文章

最新更新