在MergedDictionary中找不到WPF动态资源但在它之外是可以的

时间:2017-08-01 10:21:47

标签: c# xaml resourcedictionary

我有一个主类(带有MainView.xaml),在MainView显示后很长时间内动态加载各种其他页面。

所以MainView.xaml定义了以下样式:

<Window.Resources>
  <Style x:Key="ErrorTemplate" TargetType="TextBox">
    <Setter Property="FontSize" Value="30"/>
  </Style>
</Window.Resources>

在其中一个已加载的页面中,我有以下声明:

<Page.Resources>
  <Style x:Key="ErrorStyle" TargetType="TextBox">
    <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource ErrorTemplate"/>
  </Style>
</Page.Resources>

这很好。

现在我需要从外部XAML文件加载其他资源,因此我使用了MergedDictionaries

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- Guaranteed to not have an ErrorTemplate key -->
            <ResourceDictionary Source="MoreStyles.xaml"/>
            <ResourceDictionary>
              <Style x:Key="ErrorStyle" TargetType="TextBox">
                <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource ErrorTemplate"/>
              </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>

现在我开始收到ErrorTemplate无法解决的消息。

将其移出MergedDictionary以外再次解决问题。

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MoreStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <Style x:Key="ErrorStyle" TargetType="TextBox">
          <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource ErrorTemplate"/>
        </Style>
    </ResourceDictionary>
</Page.Resources>

这里发生了什么?

0 个答案:

没有答案