应用主题资源

主题概述


当用户在手机的“设置”菜单中启用系统范围的主题时,仅应用程序中与主题相关的颜色会发生更改。字体和控件大小不会发生更改。例如,如果用户在主题设置页面上将强调色设置为紫色,则在应用程序中,只有使用相应资源画笔配置的 UI 元素会更改为紫色。

注意:

如果在选择其他主题时,您的应用程序处于休眠状态,则在下次启动主题之后,应用程序才会适应新主题。

下面的图像显示在本主题中创建的应用程序如何适应主题更改。

从左到右,此图像显示背景为“深”并且强调色为“红”的应用程序。在“设置”页上,选择“主题”以打开“主题”页。在“主题”页上,将主题更改为“浅”背景和“mango”强调色。当再次启动该应用程序时,它会反映新的主题设置。


在此步骤中,创建该应用程序,设置该应用程序和页面标题,并添加一个矩形和两个 texBlock 控件。每个控件都演示一种使用主题资源的不同技术。

准备应用程序

  1. 在 Visual Studio 中,通过选择“文件” | “新建项目”菜单命令创建新的项目。
  2. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Windows Phone”模板。
  3. 选择 Windows Phone 应用 模板。用您选择的名称填写“名称”框。
  4. 单击“确定”。将显示 Windows Phone 平台选择对话框。
  5. 在“Windows Phone 目标版本”菜单中,确保已选择 Windows Phone OS 7.1。
  6. 单击“确定”。将创建一个新的项目,并且“MainPage.xaml”将在 Visual Studio 设计器窗口中打开。
  7. 在 MainPage.xaml 中,使用以下代码替换名为 LayoutRoot 的网格。

    XAML

    复制

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="THEME RESOURCES" Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock x:Name="PageTitle" Text="example" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
    
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    
            </Grid>
        </Grid>
    

应用主题资源

  1. 在 MainPage.xaml 上,将以下代码名添加在名为 ContentPanel 的 Grid 中。

    XAML

    复制

                <Rectangle
                    Height="100"
                    HorizontalAlignment="Left"
                    Margin="12,33,0,0"
                    Name="rectangle1"
                    Stroke="{StaticResource PhoneForegroundBrush}"
                    StrokeThickness="1"
                    VerticalAlignment="Top"
                    Width="200"
                    Fill="{StaticResource PhoneAccentBrush}" />
    

    此代码会在该页面的左上角部分创建一个矩形。注意 Fill 属性以及它如何使用 StaticResource 标记来指定名为 PhoneAccentBrush 的资源画笔。此特殊画笔允许矩形颜色响应系统范围的主题更改。例如,如果用户在手机设置菜单中修改强调色,则矩形将更改为该颜色。

  2. 在 MainPage.xaml 上,将以下代码添加在名为 ContentPanel 的 Grid 内的矩形下。

    XAML

    复制

                <TextBlock
                    Height="45"
                    HorizontalAlignment="Left"
                    Margin="20,154,0,0"
                    Name="textBlock1"
                    Text="background ="
                    VerticalAlignment="Top"
                    Width="400"
                    FontFamily="{StaticResource PhoneFontFamilySemiLight}"
                    FontSize="{StaticResource PhoneFontSizeLarge}"/>
    

    此代码会创建一个 TextBlock 控件(名为 textBlock1),该控件位于矩形下方。已将 StaticResource 标记应用于 FontFamily 和 FontSize 属性。已将 TextBlock 文本设置为字体 PhoneFontFamilySemiLight (Segoe WP SemiLight) 和字体大小 PhoneFontSizeLarge (32)。有关资源定义的更多信息,请参见 Windows Phone 主题资源

  3. 在 MainPage.xaml 上,将以下代码添加在名为 ContentPanel 的 Grid 内的 textBlock1 下。

    C#

    复制

                <TextBlock
                    Height="35"
                    HorizontalAlignment="Left"
                    Margin="21,205,0,0"
                    Name="textBlock2"
                    Text="accent color = "
                    VerticalAlignment="Top"
                    Width="400"
                    Style="{StaticResource PhoneTextAccentStyle}"/>
    

    此代码会创建第二个 TextBlock(名为 textBlock2),并应用样式资源 (PhoneTextAccentStyle)。此主题资源应用字体 (PhoneFontFamilySemiBold)、字体大小 (PhoneFontSizeNormal) 和前景 (PhoneAccentBrush)。当启动系统范围主题时,手机强调画笔将导致 TextBlock 文本颜色发生更改。

确定主题背景和强调色


主题背景和强调色可用作当前应用程序资源。在本节中,PhoneDarkThemeVisibility 和 PhoneAccentColor 资源分别用于确定主题背景和强调色。

注意:

通过访问本节演示的当前应用程序对象,基于 XNA Framework 的 Windows Phone 应用程序可以使用主题资源。有关可用主题资源的更多信息,请参见 Windows Phone 主题资源

确定主题背景

  • 在主页的代码隐藏文件 MainPage.xaml 中,在 MainPage 构造函数的 InitializeComponent 调用下添加以下代码。

    C#

    VB

    复制

            // Determine the visibility of the dark background.
            Visibility darkBackgroundVisibility =
                (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"];
    
            // Write the theme background value.
            if (darkBackgroundVisibility == Visibility.Visible)
            {
                textBlock1.Text = "background = dark";
            }
            else
            {
                textBlock1.Text = "background = light";
            }
    

    此代码演示如何从应用程序资源设置中确定当前主题背景。它确定当前主题使用的背景类型并将其写入到 textBlock1 的 Text 属性。

确定主题强调色

  • 在 MainPage.xaml 中,在 MainPage 构造函数中刚刚添加的代码下添加以下代码。

    C#

    VB

    复制

            // Determine the accent color.
            Color currentAccentColorHex =
                (Color)Application.Current.Resources["PhoneAccentColor"];
    
            string currentAccentColor = "";
    
            switch (currentAccentColorHex.ToString())
            {
                case "#FF1BA1E2": currentAccentColor = "blue"; break;
    
                case "#FFA05000": currentAccentColor = "brown"; break;
    
                case "#FF339933": currentAccentColor = "green"; break;
    
                case "#FFE671B8": currentAccentColor = "pink"; break;
    
                case "#FFA200FF": currentAccentColor = "purple"; break;
    
                case "#FFE51400": currentAccentColor = "red"; break;
    
                case "#FF00ABA9": currentAccentColor = "teal (viridian)"; break;
    
                // Lime changed to #FFA2C139 in Windows Phone OS 7.1.
                case "#FF8CBF26":
                case "#FFA2C139": currentAccentColor = "lime"; break;
    
                // Magenta changed to # FFD80073 in Windows Phone OS 7.1.
                case "#FFFF0097":
                case "#FFD80073": currentAccentColor = "magenta"; break;
    
                // #FFF9609 (previously orange) is named mango in Windows Phone OS 7.1.
                case "#FFF09609": currentAccentColor = "mango (orange)"; break;
    
                // Mobile operator or hardware manufacturer color
                default: currentAccentColor = "custom eleventh color"; break;
            }
    
            // Write the current accent color.
            textBlock2.Text = "accent color = " + currentAccentColor;
    

    此代码演示如何从应用程序主题资源中确定强调色。它确定强调色值,然后使用 switch/case 语句向 textBlock2 的 Text 属性分配友好名称。

测试应用程序


在本节中,应用程序在主题背景和强调色更改之前和之后运行。

测试应用程序

  1. 通过选择“调试 | 启动调试”菜单命令运行应用程序。这将打开模拟器窗口并启动该应用程序。在屏幕上,应会看到 Rectangle 和两个 TextBlock 控件。Rectangle 的颜色应该与当前系统主题相匹配,两个文本块应该应用不同的字体和字体大小。此外,请注意第二个 TextBlock 的文本颜色与当前系统主题相匹配,因为对前景应用了 PhoneAccentBrush。
  2. 更改主题背景和强调色。在“开始”屏幕中,滑动至“应用程序”列表,然后点按“设置”。从“设置”屏幕中,点按“主题”,然后选择其他背景和强调色。
  3. 再次启动该应用程序并查看它如何适应新的主题。下面的图像演示本节中执行的步骤。

时间: 2024-11-09 17:46:13

应用主题资源的相关文章

主题资源

Windows Phone 对主题资源使用资源字典,它是一个键控对象字典,可在 XAML 和代码中使用.本节提供有关 Windows Phone 资源字典中提供的特定主题属性的信息.您的应用程序可以访问此处显示的属性,并使用 XAML 代码将其绑定到控件.在运行时,这些资源会被添加到应用程序中. 下表列出了并定义 Windows Phone 中提供的主题属性.可以在设计器中使用控件属性或使用 {StaticResource} 标记扩展通过 XAML 应用它们.后者通过计算对已定义资源的引用来为任

WPF ResourceDictionary 主题资源替换

当我们需要在程序中替换主题,更换另一套背景.颜色.样式时,如何在不修改资源Key值,直接替换呢? 问题&疑问 1. Key值冲突 同一ResourceDictionary中,不可以使用相同Key 2. 资源替换 添加俩套样式,Xaml下是否可以将原有的资源(如样式)替换成新的资源? 加载顺序是否会冲突,比如俩个字典中都存有Image.Search图片资源,最终会以哪个字典中的资源为准呢 ResourceDictionary的合并方案 WPF的ResourceDictionary合并时,合并的规则

ResourceDictionary主题资源替换(二) :通过加载顺序来覆盖之前的主题资源

之前的ResourceDictionary主题资源替换(一)通过加载顺序来覆盖之前的主题资源,介绍了WPF框架对ResourceDictionary资源的合并规则. 此篇介绍一种在编译期间,实现资源替换的方案 前言 如下图,项目中存在俩个主题资源字典,我们想通过配置一键修改项目的主题. 首先,我们默认使用的是灰色主题 添加项目属性文件 新建文件Themes.props(主题设置), 并添加当前主题版本: 1 <Project> 2 <PropertyGroup> 3 <The

Android 主题资源风格定制 &lt;1&gt;

无论是定制系统还是自行开发APP的UI,其无论是使用标准UI还是自定义UI,最终都是需要自己熟悉主题风格的各种属性设置,不过属性非常的多,如果需要知道某个UI可以临时查看一下SDK的  D:\liuzhibao\Android\sdk\platforms\android-N\data\res路径下的,但是这个是纯粹的资源文件,没有java文件,所以还是推荐repo下来framework/base代码. 下面先看看自定义View如何添加属性之类的: 新建一个PumpKinCustomeView

ZKEACMS for .Net Core 深度解析

ZKEACMS 简介 ZKEACMS.Core 是基于 .Net Core MVC 开发的开源CMS.ZKEACMS可以让用户自由规划页面布局,使用可视化编辑设计“所见即所得”,直接在页面上进行拖放添加内容. ZKEACMS使用插件式设计,模块分离,通过横向扩展来丰富CMS的功能. 响应式设计 ZKEACMS使用Bootstrap3的栅格系统来实现响应式设计,从而实现在不同的设备上都可以正常访问.同时站在Bootstrap巨人的肩膀上,有丰富的主题资源可以使用. 简单演示 接下来看看程序设计及原

使用Material Design 创建App翻译系列----材料主题的使用(Using Material Theme)

上一篇是使用Material Design 创建App翻译系列--開始学习篇,进入正题: 新的材料主题提供了下面内容: 1. 提供了同意设置颜色板的系统部件组件. 2. 为这些系统组件提供了触摸反馈动画. 3. Activity的过渡动画. 依据你的品牌标识,使用你所控制的颜色板能够自己定义材料主题的外观. 使用主题的属性能够给ActionBar 和 status bar进行着色. 系统部件拥有新的设计和触摸反馈动画.你能够为你的应用自己定义颜色板.触摸反馈动画以及Activity之间跳转的过渡

Android资源访问

一.资源访问: (一).概念: Android中的资源是指可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中.在项目中,这些资源被保存到Android应用的res目录下. (二).资源分类: id: 字符串资源文件: 颜色资源 尺寸资源文件 布局资源 数组资源 样式和主题资源 菜单资源 已编译的任意XML资源文件[重要]: res/xml 未编译的原始资源文件: res/raw 图像(Drawable)资源 普通图像资源 xml图像资源:bitmap 图层(Layer)

Android 资源

Android资源分两类: 无法通过R清单类访问的原生资源,保存在assets目录下,R资源类的路径:..\build\generated\source\r\debug\工程名 可以通过R清单类访问的原生资源,保存在res目录下 Resources类:资源管理类 Context.getResources()方法获取Resources对象 Context.getAssets()获取访问/assets目的资源的AssetManager对象 getXxx(int id):根据资源Id获取实际的资源 X

《深入理解Windows Phone 8.1 UI控件编程》

<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的动画.掌握布局原理.列表虚拟化原理.高性能列表实现.图表编程.控件原理等. 目录如下: <深入理解Windows Phone 8 .1 UI控件编程>目录 第1章 深入解析程序界面 1.1 XAML的原理 1.1.1 XAML的概念 1.1.2 XAML页面的编译 1.1.3 动态加载XAML 1