当前位置:首页 > CN2资讯 > 正文内容

背水一战 Windows 10 (10) - 资源: StaticResource

2天前CN2资讯
背水一战 Windows 10 之 资源: StaticResource, ThemeResource

[源码下载]


背水一战 Windows 10 (10) - 资源: StaticResource, ThemeResource



作者:webabcd


介绍
背水一战 Windows 10 之 资源

  • StaticResource
  • ThemeResource



示例
1、演示“StaticResource”相关知识点
Resource/StaticResourceDemo.xaml

<Page x:Class="Windows10.Resource.StaticResourceDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.Resource" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http:///markup-compatibility/2006" mc:Ignorable="d" xmlns:common="using:Windows10.Common"> <!-- 定义各种类型的 StaticResource(Resources 属性来自 FrameworkElement) 系统会在加载 xaml 的时候去查找并应用 StaticResource 指定的资源 StaticResource 需要先定义后引用,比如如果把下面这段 Page.Resources 代码放到 Grid 后面去定义,那么就会报错 --> <Page.Resources> <x:String x:Key="MyString">StaticResource 经常用于指定 Style 或 ControlTemplate 资源,参见 /Controls/UI 部分</x:String> <x:Double x:Key="MyDouble1">24</x:Double> <x:Double x:Key="MyDouble2">48</x:Double> <Thickness x:Key="MyThickness">20,20,20,20</Thickness> <common:Employee x:Key="CurrentEmployee" Name="wanglei" Age="35" IsMale="True"></common:Employee> <!--静态资源也可以用来定义控件--> <Flyout x:Key="MyFlyout"> <StackPanel> <TextBlock Text="我是 Flyout 中的内容" /> </StackPanel> </Flyout> </Page.Resources> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <!-- 下面演示 StaticResource 的使用方法 --> <!-- StaticResource 的 3 种引用方式 --> <TextBlock Name="textBlock0" Margin="5" Text="{StaticResource MyString}" /> <TextBlock Name="textBlock1" Margin="5" Text="{StaticResource ResourceKey=MyString}" /> <TextBlock Name="textBlock2" Margin="5"> <TextBlock.Text> <StaticResource ResourceKey="MyString" /> </TextBlock.Text> </TextBlock> <TextBlock Name="textBlock3" Margin="5" FontSize="{StaticResource MyDouble1}" Text="我是 TextBlock"> <!-- Style 或 ControlTemplate 内都可以引用静态资源 --> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Padding" Value="{StaticResource MyThickness}" /> </Style> </TextBlock.Style> </TextBlock> <!-- 动态改变引用的资源 --> <Button Name="btnChangeStaticResource" Content="改变引用的 StaticResource" Margin="5" Click="btnChangeStaticResource_Click" /> <!-- 设置 FrameworkElement 的 DataContext 为一个指定的静态资源 --> <TextBlock Margin="5" DataContext="{StaticResource CurrentEmployee}" Text="{Binding Name}" /> <TextBlock Margin="5" DataContext="{StaticResource CurrentEmployee}" Text="{Binding Age}" /> <TextBlock Margin="5" DataContext="{StaticResource CurrentEmployee}" Text="{Binding IsMale}" /> <!-- 引用指定的静态资源(此静态资源是一个控件) --> <Button Margin="5" Content="按我弹出 Flyout" Flyout="{StaticResource MyFlyout}" /> <!-- 如果一个 FrameworkElement 要引用内部 Resources 的话,像下面这么写是会报错的,因为资源被先引用后定义了 --> <!-- <TextBlock Margin="5" Text="我是 TextBlock" Foreground="{StaticResource MyTextBlockForeground}"> <TextBlock.Resources> <SolidColorBrush x:Key="MyTextBlockForeground" Color="Red" /> </TextBlock.Resources> </TextBlock> --> <!-- 如果一个 FrameworkElement 要引用内部 Resources 的话,需要像下面这么写(资源先定义后引用) --> <TextBlock Margin="5" Text="我是 TextBlock"> <TextBlock.Resources> <SolidColorBrush x:Key="MyTextBlockForeground" Color="Red" /> </TextBlock.Resources> <TextBlock.Foreground> <StaticResource ResourceKey="MyTextBlockForeground" /> </TextBlock.Foreground> </TextBlock> </StackPanel> </Grid> </Page>

Resource/StaticResourceDemo.xaml.cs

/* * 演示“StaticResource”相关知识点 */ using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace Windows10.Resource { public sealed partial class StaticResourceDemo : Page { public StaticResourceDemo() { this.InitializeComponent(); } private void btnChangeStaticResource_Click(object sender, RoutedEventArgs e) { // 获取 Application 中的资源 // (double)Application.Current.Resources["MyDouble1"]; // 获取关联 xaml 内的资源(本例中的资源定义在 xaml 中的 Page 下,所以用 this.Resources[""] 来获取) if (textBlock3.FontSize == (double)this.Resources["MyDouble1"]) { // 引用指定的资源 textBlock3.FontSize = (double)this.Resources["MyDouble2"]; } else { textBlock3.FontSize = (double)this.Resources["MyDouble1"]; } } } }


2、演示“ThemeResource”相关知识点
Resource/ThemeResourceDemo.xaml

<Page x:Class="Windows10.Resource.ThemeResourceDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.Resource" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http:///markup-compatibility/2006" mc:Ignorable="d"> <!-- ThemeResource 与 StaticResource 的区别是:ThemeResource 在运行时会根据主题的变化而重新计算 --> <!-- 默认的主题资源的相关定义在如下位置(以我的开发环境为例) 1、C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10586.0\Generic\generic.xaml 2、C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10586.0\Generic\themeresources.xaml 注:默认的主题资源不会复制到应用程序中,这些资源字典在内存中作为 Windows 运行时本身的一部分存在 --> <Page.Resources> <ResourceDictionary> <!-- 通过 ResourceDictionary 内的 ResourceDictionary.ThemeDictionaries 内的 ResourceDictionary 来定义不同主题的资源 在资源中定义的主题分为 3 种:"Light", "Dark" 和 "HighContrast",其中 High Contrast(高对比度模式) 不常用,就不详细介绍了 --> <ResourceDictionary.ThemeDictionaries> <!-- Default 主题,对应 ElementTheme.Dark 或 ApplicationTheme.Dark --> <ResourceDictionary x:Key="Default"> <!-- 这里摘自 themeresources.xaml 中的部分定义,如果要覆盖其中的定义就自己再定义同名资源即可 --> <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FF000000" /> <SolidColorBrush x:Key="SystemControlBackgroundAccentBrush" Color="{ThemeResource SystemAccentColor}" /> <!-- 这是系统级资源,不在 themeresources.xaml 内,其含义是在“设置”->“个性化”->“颜色”中选择的主题色,当然也可以这样重新定义 --> <Color x:Key="SystemAccentColor">#FFFF0000</Color> </ResourceDictionary> <!-- HighContrast 主题,不常用,就不详细介绍了 --> <ResourceDictionary x:Key="HighContrast"> <!-- 这里摘自 themeresources.xaml 中的部分定义,其引用的一些颜色资源来自系统级,比如 SystemColorWindowColor 或 SystemColorButtonFaceColor 之类的,他们不在 themeresources.xaml 内 比如在“设置”->“轻松使用”->“高对比度”中目前可以设置 4 中不同的高对比度主题,每一种对应的颜色资源都不一样 --> <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="{ThemeResource SystemColorWindowColor}" /> <SolidColorBrush x:Key="SystemControlBackgroundAccentBrush" Color="{ThemeResource SystemColorButtonFaceColor}" /> </ResourceDictionary> <!-- Light 主题,对应 ElementTheme.Light 或 ApplicationTheme.Light --> <ResourceDictionary x:Key="Light"> <!-- 这里摘自 themeresources.xaml 中的部分定义,如果要覆盖其中的定义就自己再定义同名资源即可 --> <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FFFFFFFF" /> <SolidColorBrush x:Key="SystemControlBackgroundAccentBrush" Color="{ThemeResource SystemAccentColor}" /> <!-- 这是系统级资源,不在 themeresources.xaml 内,其含义是在“设置”->“个性化”->“颜色”中选择的主题色,当然也可以这样重新定义 --> <Color x:Key="SystemAccentColor">#FF00FF00</Color> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Page.Resources> <Grid Background="Transparent"> <StackPanel Name="panel" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="10 0 10 10"> <TextBlock Margin="5" Name="lblMsg" Foreground="Blue" /> <TextBlock Margin="5" Text="Microsoft HoloLens全息眼镜由Microsoft 公司于北京时间2015年1月22日凌晨与Window10同时发布。" Foreground="Blue" /> <StackPanel Width="200" Height="100" Margin="5" HorizontalAlignment="Left" Background="{ThemeResource SystemControlBackgroundAccentBrush}" /> <!--动态变换主题,引用的主题资源会重新计算--> <Button Name="btnChangeTheme" Click="btnChangeTheme_Click" Margin="5">变换主题</Button> </StackPanel> </Grid> </Page>

Resource/ThemeResourceDemo.xaml.cs

/* * 演示“ThemeResource”相关知识点 * * * 1、主题共有两种类别:Light 和 Dark,子会继承父的主题类别 * 2、Application 级别指定 Theme 的话,在 App.xaml 中做如下声明 <Application RequestedTheme="Dark"></Application> * 3、FrameworkElement 级别指定 Theme 的话,则指定 FrameworkElement.RequestedTheme 即可 * * * Application.Current.RequestedTheme - 获取或设置 Application 级别的主题(ApplicationTheme 枚举:Light, Dark) * FrameworkElement.RequestedTheme - 获取或设置 FrameworkElement 级别的主题(ElementTheme 枚举:Default, Light, Dark) * 注:ElementTheme 比 ApplicationTheme 多了一个 Default,其含义是当 ElementTheme 为 Default 时,其实际主题为 application 级主题 */ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace Windows10.Resource { public sealed partial class ThemeResourceDemo : Page { public ThemeResourceDemo() { this.InitializeComponent(); DisplayMessage(); } private void DisplayMessage() { // 当前 Application 级别的 Theme lblMsg.Text = "application theme: " + Application.Current.RequestedTheme.ToString(); lblMsg.Text += Environment.NewLine; // 当前 panel 的 Theme lblMsg.Text += "FrameworkElement theme: " + panel.RequestedTheme.ToString(); } // 动态变换主题,引用的主题资源会重新计算 private void btnChangeTheme_Click(object sender, RoutedEventArgs e) { if (panel.RequestedTheme == ElementTheme.Default) // 未指定 panel 的主题,则 panel 主题同 application 级主题 { if (Application.Current.RequestedTheme == ApplicationTheme.Dark) // application 是 Dark 主题 { panel.RequestedTheme = ElementTheme.Light; } else { panel.RequestedTheme = ElementTheme.Dark; } } else if (panel.RequestedTheme == ElementTheme.Dark) // panel 是 Dark 主题 { panel.RequestedTheme = ElementTheme.Light; } else // panel 是 Light 主题 { panel.RequestedTheme = ElementTheme.Dark; } DisplayMessage(); } } }

App.xaml

<Application x:Class="Windows10.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10" RequestedTheme="Dark"> <!-- 上面的 RequestedTheme 被我设置为 Dark 了,关于主题的相关知识点请参见:/Resource/ThemeResourceDemo.xaml --> </Application>


OK
[源码下载]

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/27496.html

    分享给朋友:

    “背水一战 Windows 10 (10) - 资源: StaticResource” 的相关文章

    DMIT VPS评测:高性能与稳定性的完美结合

    在了解DMIT VPS之前,我想先分享一下我对这家公司的最初印象。记得第一次听到DMIT时,它的名字总是在VPS领域中流传。人们提到它时,无一不带着敬仰,增加了我对它的好奇心。自从它在2017年成立以来,DMIT便以其优秀的服务和产品迅速吸引了不少用户。我也开始关注起它背后的故事。 DMIT的崛起显...

    深入了解服务器的基本概念、分类、性能评估与优化策略

    1. 服务器的基本概念与功能 在现代计算环境中,服务器的角色不可或缺。我将服务器看作是一种高性能计算机,专门为客户机提供服务。它们是构建云计算和数据中心的核心设备。通过提供各种服务,如文件存储、数据处理和应用托管,服务器帮助企业高效运营,满足日益增长的技术需求。 服务器的特点非常明显,具有高性能、高...

    台湾 VPS 服务器:低延迟高安全的理想选择

    台湾VPS服务器概述 我们常常听到“VPS服务器”这个词,但是仔细了解后,你会发现台湾的VPS服务器在众多选择中脱颖而出。这种服务器是“虚拟专用服务器”的缩写,它能让用户在一台物理服务器上分配自己的虚拟空间。这种技术让企业和个人用户可以以较低的成本拥有独立的服务器环境,从而更好地管理他们的网络资源。...

    VPS Speedtest:优化虚拟专用服务器性能的必备工具和策略

    在数字时代,VPS(虚拟专用服务器)已经成为许多企业和个人建站的首选方案。为了确保VPS的性能满足需求,VPS Speedtest便显得格外重要。简单来说,VPS Speedtest就是对虚拟专用服务器的网络速度、带宽和延迟进行测试的一种方式。通过这一过程,我们不仅能了解VPS的现有性能,还能在需要...

    腾讯云与Cloudflare的比较分析:助力企业数字化转型的最佳选择

    在数字化转型的浪潮下,越来越多的企业开始依赖云计算技术来推动业务发展。其中,腾讯云和Cloudflare作为行业的佼佼者,吸引了广泛的关注。腾讯云是腾讯集团倾力打造的云计算品牌,凭借强大的技术背景和丰富的产品线,逐渐成为全球知名的云计算服务商。它的基础设施覆盖全球五大洲,运营于58个可用区,能够为不...

    全面了解Amazon CDN CloudFront:快速、安全的内容分发网络服务

    在互联网的快速发展中,内容分发网络(CDN)成为确保网站速度和性能的重要保证。CDN是通过在全球各地的多个服务器上缓存和分发内容,以最短的路径将数据传送给用户。这样做不仅加快了加载速度,还提高了用户体验。通过保存内容的副本在离用户更近的地点,CDN能够显著降低网络延迟。 而Amazon CloudF...