WPF 切换控件界面库资源
在实际项目开发中,我们经常是使用别人开发好的界面库。但是不同界面库涉及的控件和对控件的默认样式存在偏差。为了能在不同的项目中使用多种界面库。最开始没有想过,觉得不好实现。但是实际来使用的时候,发现非常简单。
本次示例以MaterialDesignUI和ModernUI切换为例。
NuGet界面库程序包
分别添加MaterialDesignThemes和ModernUI.WPF界面库
添加默认界面库
我们这里默认添加MaterialDesignThemes的界面样式,因此我们直接在App.xaml中添加界面库资源引用。
<Application x:Class="Deamon200417.UiResource.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Deamon200417.UiResource"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Flipper.xaml"/>
<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.Blue.xaml"/>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
在同一界面使用不同界面库
<Window x:Class="Deamon200417.UiResource.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:Deamon200417.UiResource"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Header="MaterialDesignUI" Grid.Row="0">
<WrapPanel>
<ComboBox Width="30">
<ComboBoxItem Content="H1"/>
<ComboBoxItem Content="H1"/>
<ComboBoxItem Content="H1"/>
</ComboBox>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="WE"/>
<DataGridTextColumn Header="LI"/>
<DataGridTextColumn Header="BJ"/>
</DataGrid.Columns>
</DataGrid>
</WrapPanel>
</GroupBox>
<Grid Grid.Row="1">
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<GroupBox Header="ModernUI" >
<WrapPanel>
<ComboBox Width="30">
<ComboBoxItem Content="H1"/>
<ComboBoxItem Content="H1"/>
<ComboBoxItem Content="H1"/>
</ComboBox>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="WE"/>
<DataGridTextColumn Header="LI"/>
<DataGridTextColumn Header="BJ"/>
</DataGrid.Columns>
</DataGrid>
</WrapPanel>
</GroupBox>
</Grid>
</Grid>
</Window>
展示
总结
在需要切换界面资源时,修改Resource即可。
积跬步以至千里:) (:一阵没来由的风