【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…

VIO-slam 系统构建

文章目录 目录 文章目录 前言 一、VIO系统数据的获取&#xff1a;图像传感器选型、IMU传感器选型 二、建立linux系统ROS环境 三、如何读取图像数据 四、如何读取IMU传感器数据 五、标定图像和IMU数据的外参、相机的内参 六、移植VINS-MONO或者VINS-FUSION&#xff1a;主要调试获…

MySQL5.7多源复制的实验

MySQL5.7多源复制的实验 node1: 192.168.2.171 master1 node2: 192.168.2.172 slave node3: 192.168.2.170 master2 node2上执行&#xff1a; change master to master_host192.168.2.171, master_userrpl, master_passwordAbcd1234, master_port3306, master_log…

最优化课堂笔记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…

k近邻算法C++二维情况下的实现

k近邻算法C二维实现 这是一个k近邻算法的二维实现&#xff08;即K2的情况&#xff09;。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <cmath> u…

java——对象学习笔记

1.面向对象&#xff08;OOP&#xff09;的三大特性 对象的行为&#xff08;behavior&#xff09;&#xff1a;可以对对象施加哪些操作&#xff0c;或者可以对对象施加哪些方法。 对象的状态&#xff08;state&#xff09;&#xff1a;当施加那些方法后&#xff0c;对象如何响应…

C++获取一段算法程序耗时方法

1、添加头文件库#include <chrono> 2、代码编写 std::chrono::steady_clock::time_point t1 std::chrono::steady_clock::now(); std::chrono::steady_clock::time_point t2 std::chrono::steady_clock::now(); std::chrono::duration<double> time_used12 st…

cisco 动态路由协议RIP笔记

动态路由协议RIP router(config)#router rip 启动RIP进程 router(config-router)#network 1.0.0.0 宣告主网络号 router(config-router)#version 2 使用版本v2 router(config-router)#no auto-summary 关闭路由汇总功能 本文转自 meteor_hy 51CTO博客&#xff0c;原文链接&a…

EBS FORM开发问题总结

1&#xff0c;form是基于单表视图建立的&#xff0c;没有写on-insert此类的触发器。在视图上加了个rownum列结果导致form上的列不能更新 据说此种情形下的form会判断视图上的列是否属于基表&#xff0c;不属于的话会导致整个块不能更新。 2&#xff0c;在form界面上显示行号 在…

Django 学习资源

相关的分享&#xff1a; 开发者头条&#xff1a;http://toutiao.io/search?utf8%E2%9C%93&qdjango 极客头条及Django资讯&#xff1a;http://www.csdn.net/tag/django/news 一些优秀的文章&#xff1a; Django 常用测试方法&#xff1a;https://messense.me/django-common…

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…

C++,C++编程,Windows编程,MFC

编程  我们日常生活中接触到的电子类产品中的应用都是由编程而来  为什么编程&#xff0c;偷懒  我们通过编程驱使&#xff08;指挥&#xff0c;命令&#xff09;的是电信号  为什么上面说编程是偷懒&#xff0c;电的发现&#xff0c;给人们带来了便利&#xff0c;人们…

orb-slam2 代码逻辑梳理

1、开发大型C系统&#xff0c;可以首先从头文件开始&#xff1b;先把头文件的各种接口定义好&#xff1b;含义定义好&#xff1b;实现的时候只管内部实现就行&#xff0c;不需要管理外部的逻辑交互 2、定义在类中的变量&#xff0c;可以在前面加个小标志&#xff0c;mcamerMati…

eclipse中java项目转换为web项目

123456789101112经常在eclipse中导入web项目时&#xff0c;出现转不了项目类型的问题&#xff0c;导入后就是一个java项目&#xff0c;有过很多次经历&#xff0c;今天也有同事遇到类似问题&#xff0c;就把这个解决方法记下来吧&#xff0c;免得以后再到处去搜索。解决步骤&am…

让执行程序引用特定目录下的Dll

当写一个软件&#xff0c;特别是大型的软件&#xff0c;经常会引用一些第三方的类库&#xff0c;再加上一些自己的项目&#xff0c;如果这些Dll全都放在主目录下的话&#xff0c;会显得比较杂乱。我们希望将项目的类库分类成文件夹存放&#xff0c;这样才显得比较整洁。 解决方…

Angularjs controller之间的通信

刚刚看了网上的一些关于控制器之间的通信&#xff1b;然后结合自己项目做了一些&#xff0c;这里主要做的是二个同级之间的controller通信。 Html&#xff1a; 1 <html>2 <script src"http://apps.bdimg.com/libs/angular.js/1.3.9/angular.min.js"><…