【问题标题】:How to access a XAML Resource from a CustomControl.cs C# file?如何从 CustomControl.cs C# 文件访问 XAML 资源?
【发布时间】:2010-11-06 12:10:45
【问题描述】:

我有一个 XXXCustomControl.cs 类,并且在我想要访问的 c# 类中

groupStyle.ContainerStyle = this.FindResource("GroupHeaderStyle") as Style;

GroupHeaderStyle,但这种风格是在其他地方定义的(无论是在哪里......)

现在我的问题是:放置我的 GroupHeaderStyle 的最佳位置是什么以及如何通过

从 c# 代码中查找资源?

【问题讨论】:

    标签: wpf resources controls


    【解决方案1】:

    如果您的样式是在 ResourceDictionary 中定义的,您始终可以在代码中使用

    Uri resourceLocater = new Uri("/AssemblyName;component/DictionaryName.xaml", System.UriKind.Relative);
    ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
    groupStyle.ContainerStyle = resourceDictionary["GroupHeaderStyle"] as Style; 
    

    【讨论】:

      【解决方案2】:

      您应该将包含样式的 XAML 文件作为 MergedDictionary 包含到应用的资源字典中:

      <Application.Resources>
          <ResourceDictionary>
              <!--  here you can add some more resources -->
              <ResourceDictionary.MergedDictionaries>
                  <ResourceDictionary Source="mystyles.xaml"/>
                  <!--  here you can add some dictionaries -->
              </ResourceDictionary.MergedDictionaries>
          </ResourceDictionary>
      </Application.Resources>
      

      在此处查看示例:http://www.wpftutorial.net/MergedDictionaryPerformance.html

      或者实际上您可以将您的样式定义直接放入应用程序的资源中,而无需合并资源字典。但这样一来,App 的资源通常会很快膨胀。

      编辑:
      对于库的情况,您没有可用的 App.xaml。所以你基本上需要做以下事情:

      1. 向您的项目添加资源字典,并在其中定义所需的样式。
      2. 在控件的资源中,将您的字典称为合并字典。

      请注意,您需要指定字典的完整路径(“pack URI”):

      <Control.Resources>
          <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                  <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Styles.xaml"/>
              </ResourceDictionary.MergedDictionaries>
          </ResourceDictionary>
      </Control.Resources>
      

      【讨论】:

      • 是的,我在我的程序项目中就是这样做的,但我不认为控制项目需要/有一个 app.xaml 文件。似乎第 3 方免费 Web 自定义控件项目被作者 ROFL 撕掉了:P 似乎自定义控件库只有一个 Generic.xaml ......那么我应该如何从我的 c# 代码隐藏中访问这个 generic.xaml?跨度>
      • @Lisa:你是在开发库,而不是应用程序?
      • 实际上是的 :-) 现在 10 个... LOL
      • @Lisa:添加了库示例。
      • 好答案 (+1)。我添加了另一种访问在本地或引用程序集中定义的样式的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2016-07-07
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      相关资源
      最近更新 更多