尝试使用StaticResource通过ResourceDictionary和x:Key访问样式信息

时间:2013-02-07 18:06:36

标签: c# wpf xaml

我遇到WPF资源在外部ResourceDictionary中通过StaticResources访问外部样式信息的问题。

我继承了一堆代码,这些代码在WPF中使用了大量的DynamicResource来从Shared.xaml获取样式信息。我宁愿他们是StaticResources,以便设计师视图变得有用。我发现我可以在事物的.Resources中添加一个ResourceDictionary,它可以正常工作,除非在WPF中已经有一个.Resources使用。在这种情况下,我被告知我需要在我的ResourceDictionary中添加一个x:Key。我这样做,除了现在我不知道如何使用该键静态查找资源。

最小例子:

<UserControl x:Class="myClass"
  ...>
  <UserControl.Resources>
    <ResourceDictionary x:Key="Shared.xaml" Source="/ExteralResource;component/Shared.xaml"/>
    <BooleanToVisibilityConverst x:Key="BoolToVis">
  </UserControl.Resources>

  <TextBlock Background="{StaticResource BrushFromSharedXAML}" /> <!-- Never finds BrushSharedXAML -->
</UserControl>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

<UserControl.Resources>
  <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="/ExteralResource;component/Shared.xaml"/>
      </ResourceDictionary.MergedDictionaries>
      <BooleanToVisibilityConverst x:Key="BoolToVis">
  </ResourceDictionary>
</UserControl.Resources>

但是,请注意,在每个usercontrol中执行此操作会占用大量RAM,因为您实际上是在运行时为此控件的每个实例创建Shared.xaml ResourceDictionary的新实例。你应该看看SharedResourceDictionary