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即可。
積跬步以至千里:) (:一陣沒來由的風