如何将PresentationFramework.Aero主题添加到ResourceDictionary

ck8*_*4vi 5 c# wpf themes resourcedictionary

我想将PresentationFramework.Aero 主题添加到我的ResourceDictionary 中。ResourceDictionary 本身位于一个名为 ProjectResources 的程序集中。在此程序集中,我定义了项目的所有样式。所以这个 ResourceDictionary 被我的项目中的几个不同的程序集使用。到目前为止,它对于我定义的所有词典都运行良好。

现在我想添加 Aero 主题。但我总是遇到例外:

PresentationFramework.dll 中发生“System.Windows.Markup.XamlParseException”类型的未处理异常

内部异常:

{“无法加载文件或程序集“PresentationFramework.Aero,Culture=neutral”或其依赖项之一。系统找不到指定的文件。”:“PresentationFramework.Aero,Culture=neutral”}

ResourceDictionary 的定义如下:

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/ImageDefinition.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/Brushes.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesLabel.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTextBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesButton.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTabControl.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTextBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesBorder.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesListView.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesWindow.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesIndicator.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesSearchBox.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/ProjectResources;component/ProjectResources/Dictionaries/StylesTreeView.xaml"/>
                <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
Run Code Online (Sandbox Code Playgroud)

我还添加了对PresentationFramework.Aero.dll 的引用。

所以我不明白为什么它找不到定义的主题。这个定义有什么问题呢?除了这个定义之外,我是否还错过了其他任何能够使用主题的东西?

已解决: 正如图米尔在评论中所说。您需要设置参数

复制本地 = true

的PresentationFramework.Aero DLL。通过这样做,dll 将被复制到您的程序的根目录中,并且它将 dll.dll 文件复制到您的程序的根目录中。

Gle*_*mas 1

我认为您需要将完整的程序集信息添加到 ResourceDictionary Source 中:

<ResourceDictionary Source="/PresentationFramework.Aero,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml" />
Run Code Online (Sandbox Code Playgroud)