WinUWP应用构建UI篇( 1)—— 亚克力板界面

2023-10-27 14:59

本文主要是介绍WinUWP应用构建UI篇( 1)—— 亚克力板界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、亚克力背景
    • 1、设置控件背景为亚克力
    • 2、将亚克力背景延伸到标题栏
  • 二、带有深度变化的亚克力背景

一、亚克力背景

1、设置控件背景为亚克力

为控件的Background属性添加亚克力画笔(AcrylicBrush)
Gird

<Grid FocusVisualPrimaryBrush="Black"><Grid.Background><AcrylicBrush BackgroundSource="HostBackdrop"/></Grid.Background>
</Grid>

其中:

<AcrylicBrush BackgroundSource="HostBackdrop"/>

BackgroundSource属性的"HostBackdrop"说明来自应用窗口后边,除此之外,填写"Backdrop"表示来自应用内容中

填入"HostBackdrop"的效果如图
在这里插入图片描述
这样就美观许多了

2、将亚克力背景延伸到标题栏

如上图所示,这样的标题栏仍然不够美观。

这里,我们写一个方法来实现拓展亚克力效果到标题栏

private void ExtendAcrylicIntoTitleBar() {CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;titleBar.ButtonBackgroundColor = Colors.Transparent;titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;titleBar.ButtonForegroundColor = Colors.Black;
}

(使用 Visual Studio 可自动 using 缺少的命名空间)

将其在App.xmal.csOnLaunch中调用即可

看一下最终效果

在这里插入图片描述

注意:这个原理是将标题栏右上角三个按钮的背景设置为白色,同时将应用内容延伸到标题栏。因此标题栏之所以能有亚克力背景,是因为我们把Gird设置成了亚克力背景的同时将其拓展到标题栏。

二、带有深度变化的亚克力背景

先看一下效果

在这里插入图片描述
可以看到,在按下按钮后仿佛背景中的沙糖桔被“拿远了”,同时亚克力变模糊。

其实,这是一个组合动画

当按钮第一次按下时:

  • 背景沙糖桔图片被缩小(看起来仿佛被拿远)
  • 亚克力前景的不透明度从0增大到100%

当按钮再次按下时:

  • 背景沙糖桔图片被放大到原来的1.1倍
  • 亚克力前景的不透明度从100%减小到0

就像这样:

注意:接下来的操作使用了Microsoft.Toolkit.Uwp.UI.Animations
 
此包需要自行手动安装!!!安装方法如下
 
1、右键工程,点击NuGet程序包。在这里插入图片描述
2、搜索Microsoft.Toolkit.Uwp.UI.Animations并安装。在这里插入图片描述

先声明xaml命名空间:

<Page....xmlns:animations="using:Microsoft.Toolkit.Uwp.UI.Animations"xmlns:ui="using:Microsoft.Toolkit.Uwp.UI"....>....</Page>

我们在XMAL上放一个背景图片<Image />(或其他)和用作亚克力前景的<Gird />(或其他)

<Image x:Name="img" HorizontalAlignment="Left" Height="388" VerticalAlignment="Top" Width="546" Source="你要添加的图片元素.jpg" FocusVisualSecondaryBrush="#99FFFFFF" FocusVisualPrimaryBrush="Black"ui:VisualExtensions.CenterPoint="258.5,194,0"><animations:Implicit.Animations><animations:ScaleAnimation Duration="00:00:0.8" /></animations:Implicit.Animations>
</Image><Grid x:Name="acrylicGird" HorizontalAlignment="Left" Height="388" VerticalAlignment="Top" Width="517"><Grid.Background><AcrylicBrush BackgroundSource="Backdrop" TintColor="#CCA3A3A3" TintOpacity="0" Opacity="1" AlwaysUseFallback="False"/></Grid.Background><animations:Implicit.ShowAnimations><animations:OpacityAnimation Duration="0:0:0.8" To="1.0"></animations:OpacityAnimation></animations:Implicit.ShowAnimations><animations:Implicit.HideAnimations><animations:OpacityAnimation Duration="0:0:0.8" From="1.0" To="0"></animations:OpacityAnimation></animations:Implicit.HideAnimations><TextBlock x:Name="text2" HorizontalAlignment="Center" Margin="0,206,0,0" TextWrapping="Wrap" Text="是否保存更改?" VerticalAlignment="Top" FontSize="24" Foreground="White"></TextBlock>
</Grid>

<animations:Implicit.HideAnimations />表示隐藏时的隐式动画,<animations:Implicit.ShowAnimations />表示出现时的隐式动画。
<animations:Implicit.Animations />表示其他隐式动画。如上文<Image />上的 <animations:ScaleAnimation /> 是缩放时的隐式动画。

隐式动画:由系统代你执行的动画。不需要你显式写代码控制。例如上文的隐藏时和出现动画,当你改变View的Visibility属性时会自动执行动画

至此,我们声明了所有需要的隐式动画,只需要在代码中变化相应的属性即可。

///暂存img的可使性
private bool imgVisibility = true;private void Button_Click_1(object sender, RoutedEventArgs e)
{if(imgVisibility == true){acrylicGird.Visibility = Visibility.Collapsed;imgVisibility = false;var visual = ElementCompositionPreview.GetElementVisual(img);visual.Scale = new Vector3(1.2f, 1.2f, 1);}else{acrylicGird.Visibility = Visibility.Visible;imgVisibility = true;var visual = ElementCompositionPreview.GetElementVisual(img);visual.Scale = new Vector3(1.0f, 1.0f, 1);}
}

注意:控制<Image />缩放的时候并没有直接改变img.Scale属性,而是获取了img对象的Visual,对Visual操作的缩放。

(使用动画的时候直接操作img.Scale属性会抛出异常,导致应用退出)

var visual = ElementCompositionPreview.GetElementVisual(img);
visual.Scale = new Vector3(1.0f, 1.0f, 1);

这样就有了此节开头动态图的效果

这篇关于WinUWP应用构建UI篇( 1)—— 亚克力板界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/286428

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/