我有一个XXXCustomControl.cs类,在c#类里面我想通过
访问groupStyle.ContainerStyle = this.FindResource("GroupHeaderStyle") as Style;
GroupHeaderStyle,但此样式在其他地方定义(无论在哪里......)
现在我的问题:放置我的GroupHeaderStyle以及如何通过
获取它的最佳位置是什么?来自c#代码的FindResource?
答案 0 :(得分:5)
如果您的Style在ResourceDictionary中定义,您始终可以使用
在代码后面访问它Uri resourceLocater = new Uri("/AssemblyName;component/DictionaryName.xaml", System.UriKind.Relative);
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
groupStyle.ContainerStyle = resourceDictionary["GroupHeaderStyle"] as Style;
答案 1 :(得分:2)
您应该将包含该样式的XAML文件包含在App的资源字典中作为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的资源通常会很快膨胀。
编辑:
对于库的情况,您没有可用的App.xaml。所以你需要基本上做以下几点:
请注意,您需要为字典指定完整路径(“pack URI”):
<Control.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Control.Resources>