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

标签 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>

最佳答案

您需要使用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>

类库中的 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>

关于wpf - 将资源或样式设置为来自不同类库的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463785/

相关文章:

wpf - 将 WPF ValidationRule 的状态传递给 MVVM 中的 View 模型

c# - 使用 wpf C# 获取 ListBox 中复选框的内容和 Items Collection

wpf - 使用 min(width, height)/2 作为半径在 WPF 中画一个圆

c# - 用Catel关闭窗口

c# - 单击按钮更新 wpf 数据网格

WPF-从下往上动画高度

xaml - Xamarin.Forms BoxView 高度匹配宽度

c# - 使用 WPF 和 PRISM 的模块化 MVVM 应用程序

c# - 如果网格不在屏幕上,WPF DataGrid ScrollIntoView 显然什么都不做

c# - MVVM打开窗口,同时保持 View 和 View 模型分离