2011-03-28 17 views
2

我下面棱镜构建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

您的代码似乎被修剪掉。编辑,如果可能的话把完整的XAML。 – publicgk 2011-03-28 19:13:55

+1

谁低估了这个问题,请让提问者(他似乎是stackoverflow的新手)知道为什么。 – publicgk 2011-03-28 19:17:24

+1

你为什么不发布你遇到的错误 - 它会帮助人们回答你的问题。 – Zannjaminderson 2011-03-28 19:54:28

回答

1

您可以使用一个包的网址,获取来自其他组件的资源字典。检查this thread

这里是从Common组件中读取的资源辞典的例子:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
3

您需要使用DynamicResource标记扩展。原因是因为您导入的外部ResourceDictionary在为Window设置样式之后在xaml中声明。设置窗口的样式与被引用的类库中定义的风格的一个工作例子如下:

的“主窗口” 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> 

的资源字典(在一个名为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> 
+0

如果您不希望样式在您的应用程序中全局可用,这是正确的解决方案。 +1 – 2011-08-29 14:40:41