问题出现
在WPF
项目中使用MaterialDesignTheme
框架美化界面,按照官方文档介绍,在App.xaml
文件中引入如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<Application . . .>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
并编写MainWindow.xaml
代码如下:
<Window x:Class="AntiCadVirus.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AntiCadVirus"
mc:Ignorable="d"
Title="MainWindow" Height="618" Width="1000"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
>
<Grid>
<materialDesign:Card>
<TabControl VerticalContentAlignment="Bottom" materialDesign:ColorZoneAssist.Mode="PrimaryMid" Style="{StaticResource MaterialDesignNavigationRailTabControl}">
<TabItem Width="120" Height="120">
<TabItem.Header>
<StackPanel Width="auto" Height="auto">
<materialDesign:PackIcon Width="24" Height="24" HorizontalAlignment="Center" Kind="Folder" />
<TextBlock HorizontalAlignment="Center" Text="All Files" />
</StackPanel>
</TabItem.Header>
<StackPanel Margin="16">
<TextBlock Margin="0,0,0,8" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="All files" />
<TextBlock>
<Run Text="tab 1 content. Default look and behaviors." />
<LineBreak />
<LineBreak />
<Run FontStyle="Italic">
Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit...
</Run>
</TextBlock>
</StackPanel>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Width="auto" Height="auto">
<materialDesign:PackIcon Width="24" Height="24" HorizontalAlignment="Center" Kind="ClockOutline" />
<TextBlock
HorizontalAlignment="Center" Text="Recent" />
</StackPanel>
</TabItem.Header>
<StackPanel Margin="16">
<TextBlock Margin="0,0,0,8" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="Recent" />
<TextBlock>
<Run Text="tab 2 content. Default look and behaviors." />
<LineBreak />
<LineBreak />
<Run FontStyle="Italic">
Praesent sed dui arcu. Vivamus porta auctor sagittis
</Run>
</TextBlock>
</StackPanel>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Width="auto" Height="auto">
<materialDesign:PackIcon Width="24" Height="24" HorizontalAlignment="Center" Kind="Images" />
<TextBlock HorizontalAlignment="Center" Text="Photos" />
</StackPanel>
</TabItem.Header>
<StackPanel Margin="16">
<TextBlock Margin="0,0,0,8" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="Photos" />
<TextBlock>
<Run Text="tab 3 content. Default look and behaviors." />
<LineBreak />
<LineBreak />
</TextBlock>
</StackPanel>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Width="auto" Height="auto">
<materialDesign:PackIcon Width="24" Height="24" HorizontalAlignment="Center" Kind="MusicBoxMultiple" />
<TextBlock HorizontalAlignment="Center" Text="Sounds" />
</StackPanel>
</TabItem.Header>
<StackPanel Margin="16">
<TextBlock Margin="0,0,0,8" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="Sounds" />
<TextBlock>
<Run Text="tab 4 content. Default look and behaviors." />
<LineBreak />
<LineBreak />
</TextBlock>
</StackPanel>
</TabItem>
</TabControl>
</materialDesign:Card>
</Grid>
</Window>
编译及生成过程未见异常,但当运行时却不能正常出现窗体,使用调试方式运行,发现程序报找不到资源“themes/materialdesigntheme.defaults.xaml”错误:
显然,在5.1.1的MaterialDesignTheme
(写这篇博客的时候用的是5.1.1版)中,并不存在资源:
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
同样,另一个资源:
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
在该版本中也不存在。
问题解决
查看官方仓库的迁移指引(参考资料1),发现在该版本中,App.xaml
的引用内容要作一定调整:
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
应修改为:
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
则将Accent
修改成Sencondary
。
最后,App.xaml
代码修改情况参考如下:
<Application ...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Secondary/MaterialDesignColor.Lime.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
最终问题解决: