将资源或样式设置为来自不同类库的窗口

时间:2011-03-28 19:05:03

标签: wpf xaml prism

我正在遵循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>

2 个答案:

答案 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>