【Win10 应用开发】自定义应用标题栏

Win 10 app对窗口标题栏的自定义包括两个层面:一是只定义标题中各部分的颜色,如标题栏上文本的颜色、三个系统按钮(最大化,最小化,关闭)的背景颜色等;另一层是把窗口的可视区域直接扩展到标题栏上,当然三个系统按钮是保留的。也可以用某个UI元素来作为标题栏来呈现。

先看最简单的一层,即设置标题栏各部分的颜色。

ApplicationView类表示当前应用程序视图相关操作,它公开了一个TitleBar属性,访问该属性可以获取到一个ApplicationViewTitleBar实例,通过该ApplicationViewTitleBar实例的公共属性,可以设置各部分的颜色。

其实这些属性,你看它的名字就知道干吗用的,这里老周只是简单划分一下。

BackgroundColor

ForegroundColor

标题栏的背景色和前景色。背景色是标题栏的颜色,前景色是标题栏上显示的标题文本的颜色。

InactiveBackgroundColor

InactiveForegroundColor

当窗口处于非活动状态时,标题栏的背景色与前景色。和上一行中的属性相对,上一行中的属性是窗口在活动状态时的颜色。

ButtonBackgroundColor

ButtonForegroundColor

当窗口处于活动状态时,右边的三个按钮的背景色和前景色。

ButtonInactiveBackgroundColor

ButtonInactiveForegroundColor

当窗口处于非活动状态时,标题栏右边的三个按钮的颜色。

ButtonHoverBackgroundColor

ButtonHoverForegroundColor

当鼠标移到按钮上时的颜色。

ButtonPressedBackgroundColor

ButtonPressedForegroundColor

当按钮被按下时的颜色。

 

上表中的各属性的含义,老周就不说了,弄个表格出来已经很厚道了,你懂的,老周最讨厌把某个类的成员列表格的;老周也很讨厌抄袭MSDN的书。

接下来,就有一个问题了。其实设置这些颜色的代码不难写,重点是这些自定义代码该放到哪里。因为是自定义当前视图的外观的代码,注意这些设置只能是当前视图下的,如果你新建了新视图,还要重新设置外观。比较合理的位置是放到应用程序级别的代码中。当然,如果你能保证某个页面是应用程序的主页面,也可以写到页面的代码里。

App类有两个地方可以写,一个是App的构造函数内,经测试,此处发生异常。所以,也只有一处可用了,就是OnLaunch方法

下面给个例子,很是TNND简单,代码放在OnLaunch方法中。

            ApplicationView view = ApplicationView.GetForCurrentView();ApplicationViewTitleBar bar = view.TitleBar;bar.BackgroundColor = Colors.Green;bar.ForegroundColor = Colors.Yellow;bar.ButtonBackgroundColor = Colors.DarkGoldenrod;bar.ButtonForegroundColor = Colors.DarkBlue;bar.ButtonHoverBackgroundColor = Colors.LightYellow;bar.ButtonHoverForegroundColor = Colors.Pink;bar.ButtonPressedBackgroundColor = Colors.Orange;bar.ButtonPressedForegroundColor = Colors.Purple;

 是吧,很简单,找到对应的属性,拼命地赋值就行了。你没有赋值的属性就采用系统默认的颜色。

然后看看结果。

有一点,你可以注意到:当鼠标移到关闭按钮上时,它的背景始终是红色,无论你怎么改都一样

 

好了,上面的例子完结,下面我们看看如何将应用程序的可视区域伸展到标题栏中。

同样,在App类的OnLaunch方法中加入以下代码:

            ApplicationView view = ApplicationView.GetForCurrentView();var bar = view.TitleBar;bar.ButtonBackgroundColor = Colors.Blue;bar.ButtonForegroundColor = Colors.White;bar.ButtonHoverBackgroundColor = Colors.SkyBlue;CoreApplicationView coreappview = CoreApplication.GetCurrentView();coreappview.TitleBar.ExtendViewIntoTitleBar = true;

通过CoreApplication.GetCurrentView静态方法,可以得到表示当前视图的CoreApplicationView实例,再通过以下语句,把ExtendViewIntoTitleBar设置为true,表示允许窗口的可视部分扩展到标题栏上。

            coreappview.TitleBar.ExtendViewIntoTitleBar = true;

 

得到效果如下图所示:

 

大概有些时候,仅仅扩充到标题栏还不够,可能希望自定义一下标题栏。上面的代码已经允许可视区域扩展到标题栏,接下来我们只需要定义一下自定义标题栏的内容,然后通过Window类就可以自定义为标题栏了。

现在,我们设计一些主页面的UI。

    <Grid Background="#FFD3CA94"><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/></Grid.RowDefinitions><StackPanel Name="tbar" Background="#FF916A88" Orientation="Horizontal"><Button Background="Blue"><SymbolIcon Symbol="Back"/></Button><Button Background="Green"><SymbolIcon Symbol="Forward"/></Button><TextBlock Margin="16,0,0,0" VerticalAlignment="Center" Text="我的应用" Foreground="White" /></StackPanel><TextBlock Text="My App" FontSize="100" Grid.Row="1"/></Grid>


然后在页面的代码中,将StackPanel元素作为标题栏。

        public MainPage(){this.InitializeComponent();Window.Current.SetTitleBar(this.tbar);}


调用SetTitleBar方法可以将某个UI元素设置为标题栏的内容。

 

得到的结果如下:

 

 

好,扯完了,肚子饿了,开饭。

示例源码下载

 

转载于:https://www.cnblogs.com/tcjiaan/p/4783049.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(59):Python实战编程-Graphics

立即学习:https://edu.csdn.net/course/play/19711/343123?utm_sourceblogtoedu 1.graphics&#xff1a;图形界面组件的绘制&#xff0c;利用的是坐标的定位来对各个组件进行相对地位置布局 2.graphics与thinkter的区别 1&#xff09;窗口的创建上&#xff1a; win graphics…

IIS6配置Asp.net MVC运行环境

Windows server 2003 IIS6 搭建Asp.net MVC运行环境 1、安装.Net Framework4.0。 下载地址&#xff1a; http://www.microsoft.com/zh-cn/download/details.aspx?id17718 2、安装WindowsServer2003-KB968930-x86-CHS.exe&#xff0c;PowerShell 2.0的补丁 下载地址&#xff1…

最优化课堂笔记04:非线性规划(考点4-5例题)

目录 4.1 多元函数的泰勒展开 4.2方向导数与梯度 4.2.1方向导数 n元函数在点沿特定方向的方向导数 4.2.2梯度 4.3二次函数及正定矩阵 4.4凸函数与凸规划 4.4.1凸函数 4.4.2凸规划 4.4无约束优化问题的极值条件 4.5约束优化问题的极值条件&#xff08;重点考点&#x…

orb-slam2在PC和ARM上运行

ORBSLAM2的编译与运行 环境&#xff1a;Ubuntu16.04 ORBSLAM2 &#xff08;1&#xff09;安装工具 sudo apt-get install cmake sudo apt-get install git sudo apt-get install gcc g (2) 安装pangolin 安装依赖项&#xff1a; sudo apt-get install libglew-dev sudo ap…

烂泥:智能DNS使用与配置

公司的业务现在已经扩展到海外&#xff0c;对外提供的统一接口都是通过域名来解析的&#xff0c;但是海外用户访问国内接口的话&#xff0c;你懂的&#xff0c;很慢的。为了提高域名解析的速度&#xff0c;打算使用智能DNS功能&#xff0c;来解决海外用户域名解析慢的问题。 PS…

现代制造工程——考试复习01

第一部分 金属切削原理 1.切削过程中工件上的加工表面分类 2.不同工艺的工件和刀具的相对关系 3.不同工艺的主运动和进给运动的方向 4.思考&#xff1a;主运动一般只有一个&#xff0c;但是进给运动一个也可以是多个 5.切削三要素&#xff08;必考&#xff09; 6.思考&#x…

最优化课堂笔记05——一维最优化方法(含重点:黄金分割法)

5-1 一维搜索区间的确定 搜索区间只是适用于单峰区间 、 例子 5.2 黄金分割法&#xff08;重点&#xff09; 上面的a与b都会跟着计算的推进而变化的 例子重点 5.3二次插值法 总结&#xff1a; 5.4 切线法&#xff08;牛顿法&#xff09; 5.5 割线法&#xff08;不需要计算导数&…

C++中静态成员数据初始化问题

C中静态成员数据初始化问题 1、静态成员变量&#xff1a;定义为静态成员意味着它能被所有的实例化对象所共有&#xff0c;其修改值为该类的其它所有实例所见。 下面看一个例子 class people { public:people(int i):id(i){num;} private:static int num;int id; }; num为静…

现代制造工程笔记04-精密超精密加工和特种加工(主要掌握加工原理加工条件)

一、精密加工与超精密加工 不同时期对精密加工的定义以及要求不一样 1.1金刚石超精密加工&#xff08;&#xff09; 1.2精密磨料加工——精密砂带抛光加工 1.3超声波加工 1.4 电解加工&#xff08;加工材料必须是金属&#xff09;——工件失去电子成型 1.5电铸加工——工件得到…

现代制造工程笔记05-表面工程技术

机械零部件对表面处理的技术 1.表面预处理 2.表面强攻和改性 残余压应力会导致裂纹的倾向 3.表面涂敷和表面膜 热蒸镀速度慢&#xff0c;厚度好控制&#xff1b;电子束蒸镀效率高&#xff0c;精度高 离子膜是最好的镀膜方法 4.表面膜——托合金法

使用Spring MVC,Mybatis框架等创建Java Web项目时各种前期准备的配置文件内容

1、pom.xml 首先&#xff0c;pom.xml文件&#xff0c;里面包含各种maven的依赖&#xff0c;代码如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"h…

WinForm窗体PropertyGrid控件的使用

使用过 Microsoft Visual Basic 或 Microsoft Visual Studio .NET的朋友&#xff0c;一定使用过属性浏览器来浏览、查看或编辑一个或多个对象的属性。.NET 框架 PropertyGrid 控件是 Visual Studio .NET 属性浏览器的核心。PropertyGrid 控件显示对象或类型的属性&#xff0c;并…

ROS环境下跑orb-slam2 单目相机

1、配置环境、安装ROS ubuntu16.04 kinetic 2、安装依赖 cmake opencv Eigen3: sudo apt-get install libeigen3-dev 3、创建catkin_ws 文件夹&#xff0c;并ROS初始化工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws/ …

有限元笔记05——板单元(4节点12自由度)和壳单元(4节点24自由度)

plane单元主要是受拉伸&#xff0c;plate板单元主要受弯曲应力&#xff0c;二者相加就形成了shell壳单元

鼠标提上去弹出提示层(定位)

希望的效果如图&#xff1a; 网上找了各纯css的 做了下修改&#xff1a; 代码如下&#xff1a; 1234567891011121314151617181920212223242526272829303132333435363738394041424344<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w…

方差和协方差的数据意义

方差和协方差 定义 方差 度量单个随机变量的离散程度&#xff0c;公式如下&#xff1a; 协方差 度量两个随机变量&#xff08;变化趋势&#xff09;的相似程度&#xff0c;定义如下&#xff1a;

SAP ABAP规划 使用LOOP READ TABLE该方法取代双LOOP内部表的方法

如上&#xff0c;用双LOOP的方法实现两个内表匹配筛选性能不高&#xff0c;能够换成以下LOOP READ TABLE的方法 注意问题&#xff0c;gwa_vbap工作区READ TABLE之前需要排空。 版权声明&#xff1a;本文博主原创文章。博客&#xff0c;未经同意不得转载。 转载于:https://www.c…

有限元ansys/lsdyna学习笔记-组件component与组元part_02

详细链接&#xff1a;https://wk.baidu.com/view/d24db6db856a561252d36f99?ivk_sa1023194j