2010-11-06 35 views
1

我有一个XXXCustomControl.cs类和C#类里面我想通过如何从CustomControl.cs C#文件访问XAML资源?

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

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

现在我的问题:什么是最好的地方把我的GroupHeaderStyle和如何获得它通过

FindResource从C#代码?

回答

2

你应该包括含有风格融入您的应用程序的资源字典作为MergedDictionary您的XAML文件:

<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.xaml。所以,你需要做的基本上是以下几点:

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

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

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

是的,我这样做我的程序项目,但我没有想到控制项目需要/有一个app.xaml文件。似乎第三方免费的网络自定义控制项目被作者ROFL翻录:P似乎一个自定义控件库只有一个Generic.xaml ...那么我应该如何从我的c#代码隐藏中访问这个generic.xaml? – Elisabeth 2010-11-06 12:31:50

+0

@Lisa:你在开发一个图书馆,而不是一个应用程序? – Vlad 2010-11-06 12:33:31

+0

实际上是:-) 10 now ... LOL – Elisabeth 2010-11-06 12:35:16

5

如果你的风格是一个资源字典中的定义,你可以随时在代码

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