我正在遵循prism来构建wpf应用程序。在我的应用程序中,有一个辅助类库,我在其中定义了资源和样式,这些资源和样式将由解决方案中的多个类库使用。
但是当我尝试将资源设置为窗口的Style属性时,我收到错误。窗口在资源的不同类库中。
我得到的错误是: 找不到名为“{resourceName}”的资源。资源名称区分大小写。标记文件中对象'MyWindow'出错
我使用了以下代码,但它无效
<Window x:Class="Class1" Style="{StaticResource resourceName}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/classlibrary;component/Dictionary/resource1.xaml" /> </ResourceDictionary.MergedDictionaries>
< /ResourceDictionary>
< /Window.Resources>
</Window>
答案 0 :(得分:3)
您需要使用DynamicResource标记扩展名。这是因为您导入的外部ResourceDictionary是在为您的Window设置样式后在xaml中声明的。使用引用的类库中定义的样式设置Window样式的工作示例如下:
“MainWindow”xaml:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Style="{DynamicResource TestStyle}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/ClassLibrary1;component/Styles.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
</Grid>
</Window>
类库中的ResourceDictionary(在名为Styles.xaml的文件中定义):
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="TestStyle" TargetType="Window">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Green"></SolidColorBrush>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
答案 1 :(得分:1)
您可以使用包URL从另一个程序集中获取资源字典。检查this thread。
以下是从Common
程序集中读取的资源字典的示例:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>