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

相关文章

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐