如何在UWP库中定义主题?

时间:2017-08-11 16:59:18

标签: xaml uwp resources themes

我正在创建一个包含自定义控件的UWP库,我想为我的控件定义一个黑暗和明亮的主题。我知道我们可以向App.xaml添加主题资源字典。我们可以在那里指定一个暗/亮主题并设置所请求的主题属性。但是因为我正在创建一个库,所以我的项目中没有App.xaml。我可以在图书馆项目中定义一个主题吗?怎么样?

1 个答案:

答案 0 :(得分:0)

您可以使用添加>在Microsoft Visual Studio中创建资源词典文件。 新商品...... > “项目”菜单中的资源字典选项。然后我们可以在ThemeDictionaries文件中定义ResourceDictionary

例如:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:ClassLibrary1">
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Light">
                <SolidColorBrush x:Key="CustomColor" Color="Orange" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="Dark">
                <SolidColorBrush x:Key="CustomColor" Color="Blue" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="HighContrast">
                <SolidColorBrush x:Key="CustomColor" Color="Green" />
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>

要使用该字典,我们可以将其与控件字典合并:

<UserControl
    x:Class="ClassLibrary1.MyUserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ClassLibrary1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Rectangle Fill="{ThemeResource CustomColor}" Width="500" Height="500"></Rectangle>
    </Grid>
</UserControl>

如果要指定深色/浅色主题,可以在控件中设置RequestedTheme