[源码下载]

背水一战 Windows 10 (5) - UI: 标题栏

作者:webabcd

介绍
背水一战 Windows 10 之 UI

  • 标题栏

示例
TitleBarDemo.xaml

<Page
x:Class="Windows10.UI.TitleBarDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.UI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="0 10 0 0" /> <Button Name="btnTitle" Content="改变标题" Click="btnTitle_Click" Margin="0 10 0 0" /> <Button Name="btnColor" Content="改变颜色" Click="btnColor_Click" Margin="0 10 0 0" /> <Button Name="btnBack" Content="显示/隐藏返回按钮" Click="btnBack_Click" Margin="0 10 0 0" /> <Button Name="btnHidden" Content="显示/隐藏标题栏" Click="btnHidden_Click" Margin="0 10 0 0" /> <Button Name="btnFullScreen" Content="全屏/取消全屏" Click="btnFullScreen_Click" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

TitleBarDemo.xaml.cs

/*
* 演示 TitleBar 相关知识点
*
* 通过 ApplicationView.GetForCurrentView().TitleBar 获取当前的 ApplicationViewTitleBar
* 通过 CoreApplication.GetCurrentView().TitleBar 获取当前的 CoreApplicationViewTitleBar
*
* 注:手工测量 TitleBar 高度为 32 像素
*/ using System;
using Windows.ApplicationModel.Core;
using Windows.UI;
using Windows.UI.Core;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.UI
{
public sealed partial class TitleBarDemo : Page
{
public TitleBarDemo()
{
this.InitializeComponent(); this.Loaded += TitleBarDemo_Loaded;
} private void TitleBarDemo_Loaded(object sender, RoutedEventArgs e)
{ } // 改变 Title
private void btnTitle_Click(object sender, RoutedEventArgs e)
{
// 改变左上角 Title 的显示内容
ApplicationView.GetForCurrentView().Title = $"My Title Bar({new Random().Next(1000, 10000).ToString()})";
} // 改变 TitleBar 上的相关颜色
private void btnColor_Click(object sender, RoutedEventArgs e)
{
// 获取当前的 ApplicationViewTitleBar
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar; if (titleBar.BackgroundColor != Colors.Orange)
{
// 背景色
titleBar.BackgroundColor = Colors.Orange;
// 前景色
titleBar.ForegroundColor = Colors.White;
// 窗口为非活动状态时的背景色(活动状态就是焦点在窗口上,非活动状态就是焦点不在窗口上)
titleBar.InactiveBackgroundColor = Colors.Yellow;
// 窗口为非活动状态时的前景色
titleBar.InactiveForegroundColor = Colors.Gray; // TitleBar 上的按钮的背景色(按钮包括:最小化按钮,最大化按钮,关闭按钮,返回按钮)
titleBar.ButtonBackgroundColor = Colors.Orange;
// TitleBar 上的按钮的鼠标经过的背景色
titleBar.ButtonHoverBackgroundColor = Colors.Blue;
// TitleBar 上的按钮的鼠标按下的背景色
titleBar.ButtonPressedBackgroundColor = Colors.Green;
// TitleBar 上的按钮的非活动状态的背景色
titleBar.ButtonInactiveBackgroundColor = Colors.Yellow; // TitleBar 上的按钮的前景色
titleBar.ButtonForegroundColor = Colors.White;
// TitleBar 上的按钮的鼠标经过的前景色
titleBar.ButtonHoverForegroundColor = Colors.Red;
// TitleBar 上的按钮的鼠标按下的前景色
titleBar.ButtonPressedForegroundColor = Colors.Purple;
// TitleBar 上的按钮的非活动状态的前景色
titleBar.ButtonInactiveForegroundColor = Colors.Gray;
}
else
{
titleBar.BackgroundColor = null;
titleBar.ForegroundColor = null;
titleBar.InactiveBackgroundColor = null;
titleBar.InactiveForegroundColor = null; titleBar.ButtonBackgroundColor = null;
titleBar.ButtonHoverBackgroundColor = null;
titleBar.ButtonPressedBackgroundColor = null;
titleBar.ButtonInactiveBackgroundColor = null; titleBar.ButtonForegroundColor = null;
titleBar.ButtonHoverForegroundColor = null;
titleBar.ButtonPressedForegroundColor = null;
titleBar.ButtonInactiveForegroundColor = null;
}
} // 显示或隐藏 TitleBar 左上角的返回按钮
private void btnBack_Click(object sender, RoutedEventArgs e)
{
// 当前 TitleBar 左上角的返回按钮是隐藏状态
if (SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility == AppViewBackButtonVisibility.Collapsed)
{
// 显示 TitleBar 左上角的返回按钮
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
// 监听 TitleBar 左上角的返回按钮的点击事件
SystemNavigationManager.GetForCurrentView().BackRequested += TitleBarDemo_BackRequested;
}
else
{
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
SystemNavigationManager.GetForCurrentView().BackRequested -= TitleBarDemo_BackRequested;
}
}
// 处理 TitleBar 左上角的返回按钮的点击事件
private void TitleBarDemo_BackRequested(object sender, BackRequestedEventArgs e)
{
if (MainPage.Current.Container.CanGoBack)
MainPage.Current.Container.GoBack();
} // 显示或隐藏 TitleBar
private void btnHidden_Click(object sender, RoutedEventArgs e)
{
// 切换 TitleBar 的显示/隐藏状态
// 注:TitleBar 隐藏时,仍会显示最小化按钮、最大化按钮、关闭按钮
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar ^= true; /*
* 如果需要自定义 TitleBar 的话,就隐藏它,然后自定义一个自己的即可
* 要注意 TitleBar 的 Height, SystemOverlayLeftInset, SystemOverlayRightInset
* 要注意如果收到 CoreApplicationViewTitleBar.LayoutMetricsChanged 事件,则 Height, SystemOverlayLeftInset, SystemOverlayRightInset 的值可能发生了变化
* 要注意窗口大小发生变化时的处理
*/
CoreApplicationViewTitleBar titleBar = CoreApplication.GetCurrentView().TitleBar;
// Height - TitleBar 的高度
// SystemOverlayLeftInset - TitleBar 浮层左侧的间隔,在这个间隔部分不要放置自定义内容
// SystemOverlayRightInset - TitleBar 浮层右侧的间隔,在这个间隔部分不要放置自定义内容(右侧间隔部分是用于放置最小化按钮,最大化按钮,关闭按钮的。经过测试这个间隔明显多出来一些,也许是预留给其他按钮的)
lblMsg.Text = $"titleBarHeight: {titleBar.Height}, titleBarLeftInset: {titleBar.SystemOverlayLeftInset}, titleBarRightInset: {titleBar.SystemOverlayRightInset}";
} // 进入全屏模式,退出全屏模式
private void btnFullScreen_Click(object sender, RoutedEventArgs e)
{
ApplicationView view = ApplicationView.GetForCurrentView();
// 判断当前是否是全屏模式
if (view.IsFullScreenMode)
{
// 退出全屏模式
view.ExitFullScreenMode();
lblMsg.Text = "退出全屏模式";
}
else
{
// 尝试进入全屏模式
bool isSuccess = view.TryEnterFullScreenMode();
if (isSuccess)
{
lblMsg.Text = "进入全屏模式";
}
else
{
lblMsg.Text = "尝试进入全屏模式失败";
}
} // 注意,进入全屏模式后,TitleBar 会消失,鼠标移动到顶部,则 TitleBar 会再次出现(当然这个行为的具体表现取决于 FullScreenSystemOverlayMode,参见 FullScreen.xaml)
CoreApplicationViewTitleBar titleBar = CoreApplication.GetCurrentView().TitleBar;
// TitleBar 是否是可见状态
bool titleBarIsVisible = titleBar.IsVisible;
// TitleBar 的可见性发生变化时触发的事件
titleBar.IsVisibleChanged += delegate { };
}
}
}

OK
[源码下载]

背水一战 Windows 10 (5) - UI: 标题栏的更多相关文章

  1. 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸

    [源码下载] 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸 作者:webabcd 介绍背水一战 Windows 10 之 UI 窗口全屏 窗口尺寸 示例1.窗口全屏UI/F ...

  2. 背水一战 Windows 10 (4) - UI: 多窗口

    [源码下载] 背水一战 Windows 10 (4) - UI: 多窗口 作者:webabcd 介绍背水一战 Windows 10 之 UI 多窗口 示例1.自定义帮助类,用于简化 Secondary ...

  3. 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向

    [源码下载] 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向 作者:webabcd 介绍背水一战 Windows 10 之 UI UI 设计概述 启动屏幕(闪屏) 屏 ...

  4. 背水一战 Windows 10 (8) - 控件 UI: StateTrigger

    [源码下载] 背水一战 Windows 10 (8) - 控件 UI: StateTrigger 作者:webabcd 介绍背水一战 Windows 10 之 控件 UI VisualState 之 ...

  5. 背水一战 Windows 10 (7) - 控件 UI: VisualState, VisualStateManager, 控件的默认 UI

    [源码下载] 背水一战 Windows 10 (7) - 控件 UI: VisualState, VisualStateManager, 控件的默认 UI 作者:webabcd 介绍背水一战 Wind ...

  6. 背水一战 Windows 10 (6) - 控件 UI: 字体的自动继承的特性, Style, ControlTemplate

    [源码下载] 背水一战 Windows 10 (6) - 控件 UI: 字体的自动继承的特性, Style, ControlTemplate 作者:webabcd 介绍背水一战 Windows 10 ...

  7. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

  8. 背水一战 Windows 10 (13) - 绘图: Stroke, Brush

    [源码下载] 背水一战 Windows 10 (13) - 绘图: Stroke, Brush 作者:webabcd 介绍背水一战 Windows 10 之 绘图 Stroke - 笔划 Brush ...

  9. 背水一战 Windows 10 (12) - 绘图: Shape, Path

    [源码下载] 背水一战 Windows 10 (12) - 绘图: Shape, Path 作者:webabcd 介绍背水一战 Windows 10 之 绘图 Shape - 图形 Path - 路径 ...

随机推荐

  1. Git学习笔记(1)——安装,配置,创建库,文件添加到库

    初次接触git,为了记忆深刻,把学习的简单流程记录下来. 本文记录了Git在Ubuntu上的安装,配置,以及创建版本库和往库中添加文件的过程. 1.Git的安装:(Ubuntu-Linux非常友好的安 ...

  2. cocoapods 更新

    sudo gem update --system sudo gem install cocoapods pod setup pod --version

  3. 知方可补不足~sqlserver中使用ROW_NUMBER进行的快速分页

    回到目录 这个在SQL2005之后最见的一种分页方式,也是Linq默认生成的执行分页的方法(skip,take),当然在性能上小数量没有问题,在数据达到百万时会很慢,这是我们要清楚的,有时我们在LIN ...

  4. [Spring框架]Spring 事务管理基础入门总结.

    前言:在之前的博客中已经说过了数据库的事务, 不过那里面更多的是说明事务的一些锁机制, 今天来说一下Spring管理事务的一些基础知识. 之前的文章: [数据库事务与锁]详解一: 彻底理解数据库事务一 ...

  5. C#并行编程-相关概念

    菜鸟初步学习,不对的地方请大神指教,参考<C#并行编程高级教程.pdf> 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C# ...

  6. salesforce 零基础开发入门学习(十五)salesforce中formula的使用(不含Date/Time)

    本文参考官方的formula介绍PDF:https://resources.docs.salesforce.com/200/latest/en-us/sfdc/pdf/salesforce_usefu ...

  7. cordova platform add specified version

    cordova platform add specified version 命令格式 cordova platform add android@4.0 可用的版本 Valid install tar ...

  8. Jasmine入门(上)

    什么是Jasmine Jasmine是一个Javascript的BDD(Behavior-Driven Development)测试框架,不依赖任何其他框架. 如何使用Jasmine 从Github上 ...

  9. Java Synchronized Blocks

    From http://tutorials.jenkov.com/java-concurrency/synchronized.html By Jakob Jenkov   A Java synchro ...

  10. 初了解JS设计模式,学习笔记

    什么是设计模式. 回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗? 我们为什么需要设计模式. 如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也 ...