当前位置:

首页 > 软件教程 > UWP XAML响应式布局技巧解析

UWP XAML响应式布局技巧解析

响应式布局的概念是一个页面适配多个终端及不同分辨率。在针对特定屏幕宽度优化应用UI时,我们将此称为创建响应式设计。WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素的标准设计。到了UWP诞生的时候响应式布局已经很流行了,所以UWP提供了很多响应式布局的技术,这篇文章简单总结了一些响应式布局常用的技术,更完整的内容请看文章最后给出的参考网站。1.传统的XAML如何适配不同分辨率所谓的传统,是指在响应式设计没流行前XAML就已经存在的应对不同分辨率的技术,毕竟桌面客户端常

本文目录

    响应式布局的概念是一个页面适配多个终端及不同分辨率。在针对特定屏幕宽度优化应用 UI 时,我们将此称为创建响应式设计。WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素的标准设计。到了UWP诞生的时候响应式布局已经很流行了,所以UWP提供了很多响应式布局的技术,这篇文章简单总结了一些响应式布局常用的技术,更完整的内容请看文章最后给出的参考网站。

    1. 传统的XAML如何适配不同分辨率

    所谓的传统,是指在响应式设计没流行前XAML就已经存在的应对不同分辨率的技术,毕竟桌面客户端常常也调整窗体的大小,有些人还同时使用两个不同分辨率的屏幕。以我的经验来说以下这些做法可以使UI有效应对分辨率改变:

    使用相对定位代替决定定位使用*和Auto代替具体尺寸(除了间距)使用WrapPanel代替StackPanel不要忘记使用ScrollViewer

    不同的DPI设定、不同的本地化字符串长度都可能使整个页面布局乱掉。而且和网页不同,WPF窗体默认没有提供ScrollViewer,所以千万不能忘记。在桌面客户端合理使用以上技术可以避免客户投诉。但UWP主打跨平台,它需要更先进(或者说,更激进)的技术。

    2. 响应式设计技术

    微软的官方文档介绍了UWP中响应式设计常用的6个技术,包括重新定位、调整大小、重新排列、显示/隐藏、替换和重新构建,具体可见以下网站:

    [UWP]XAML中的响应式布局技术

    响应式设计技术 - UWP apps Microsoft Docs

    3. AdaptiveTrigger

    AdaptiveTrigger是UWP中一种最常用的响应式布局技术。VisualStateManager用于管理UI的视觉状态,可以在UI上设置多个视觉状态,然后用VisualStateManager.GoToState在这些状态间切换,了解自定义控件的开发者对这点应该都不陌生。UWP提供了AdaptiveTrigger这个状态触发器,它以MinWindowWidth和MinWindowHeight未条件,根据页面宽度或高度进入设定好的不同状态(通常来说只使用MinWindowWidth,同时使用Height和Width做条件很容易产生混乱,而且大部分情况下响应式布局都会使用垂直滚动条所以对高度不关心。)在下面的示例中StackPanel默认使用垂直排列,当页面的宽度超过720像素时改为水平排列。

    代码语言:javascript代码运行次数:0运行复制
                                                                                                                                                                                                                
    [UWP]XAML中的响应式布局技术

    使用AdaptiveTrigger可以做到前一节中提到的UWP中响应式设计常用的6个技术,除了UWP自带的AdaptiveTrigger,也可以自定义StateTriggerBase,这将在下一篇文章中介绍。

    4. NavigationView

    UWP中部分控件已经实现了响应式行为, 最典型的就是NavigationView。可以使用 PaneDisplayMode 属性配置不同的导航样式或显示模式。默认情况下,PaneDisplayMode 设置为 Auto。在 Auto 模式下,导航视图会进行自适应,在窗口狭窄时为 LeftMinimal,接下来为 LeftCompact,随后在窗口变宽时为 Left。

    [UWP]XAML中的响应式布局技术

    XAML Controls Gallery就是一个很好的结合NavigationView的响应式布局示例:

    [UWP]XAML中的响应式布局技术
    5. 定制布局

    如果AdaptiveTrigger需要设置的属性太多,倒不如直接切换UI,最简单的做法是整个显示/隐藏,例如这样:

    代码语言:javascript代码运行次数:0运行复制
                                                                                                                                                                                                                

    这种时候MVVM的优势就体现出来了,因为VIEW和VIEWMODEL解耦了,VIEW随便换,而且整个UI显示隐藏说不定比多个小模块独自改变性能更好。说到性能,UWP的很多场景都为已经死了多年的WindowsWobile考虑了性能,更不用说现在的桌面平台,所以做UWP不需要太过介意性能,尤其是已经在WPF上培养出小心翼翼的习惯的开发者,UWP的性能问题等真的出现了再说。

    除了使用显示隐藏,UWP还可以使用限定符名称指定CodeBehind对应的XAML文件,这有点像是自适应应用的话题。使用格式如下:

    [pageName] .DeviceFamily- [qualifierString] .xaml

    [UWP]XAML中的响应式布局技术

    如果要用在文件夹,格式如下:

    DeviceFamily- [qualifierString]

    [UWP]XAML中的响应式布局技术

    要更灵活些,可以根据条件跳转到不同的页面:

    代码语言:javascript代码运行次数:0运行复制
    if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Tablet"){    rootFrame.Navigate(typeof(MainPage_Tablet), e.Arguments);}else{    rootFrame.Navigate(typeof(MainPage), e.Arguments);}

    虽然示例代码这样写,其实现在除了桌面几乎没有其它平台了,所以大部分情况下还是根据当前尺寸跳转。

    6. compact size

    正如前面所说,既然已经不需要其它平台,那UWP的响应式布局大部分情况都是为了应对尺寸问题,Windows UI Library还提供了一个紧凑的主题用于小尺寸UI(需要安装Microsoft.UI.Xaml的Nuget包):

    代码语言:javascript代码运行次数:0运行复制
        
    代码语言:javascript代码运行次数:0运行复制
    private void Standard_Checked(object sender, RoutedEventArgs e){    ContentFrame.Navigate(typeof(SampleStandardSizingPage), null, new SuppressNavigationTransitionInfo());}private void Compact_Checked(object sender, RoutedEventArgs e){    ContentFrame.Navigate(typeof(SampleCompactSizingPage), null, new SuppressNavigationTransitionInfo());}
    [UWP]XAML中的响应式布局技术
    7. ViewBox

    ViewBox可以根据自身大小放大或缩小它的Content元素,某些情况下它是WPF和UWP平台的终极响应式设计解决方案,因为WPF/UWP元素都是矢量元素所以大部分元素都可以无损缩放(当然会有像素对不齐的情况),所以偷懒的话就可以使用ViewBox:

    [UWP]XAML中的响应式布局技术
    8. 参考

    采用 XAML 的响应式布局 - UWP apps Microsoft Docs

    响应式设计技术 - UWP apps Microsoft Docs

    响应式设计的屏幕大小和断点 - UWP apps Microsoft Docs

    导航视图 - UWP apps Microsoft Docs

    AdaptiveTrigger Class (Windows.UI.Xaml) - Windows UWP applications Microsoft Docs

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    WPF通过 WM_COPYDATA 实现与Qt的进程间通信
    WPF通过 WM_COPYDATA 实现与Qt的进程间通信

    在开发中,我们有时需要让不同的框架程序(如 C# 的 WPF 和 C++ 的 Qt)进行实时数据交互。由于两者底层都运行在 Windows 系统上,利用 Win32 API 中的 WM_COPYDATA 消息是一种简单、高效且低延迟的解决方案。 接下来,我们将详细介绍如何通过 WM_COPYDATA

    WPF 多点漫游实现:纯数学计算方式解析
    WPF 多点漫游实现:纯数学计算方式解析

    在WPF中,除了使用Manipulation系列进行触摸的多点漫游外,还可以利用WPF提供的ManipulationProcessor2D纯数学库来实现多点漫游元素功能。这是一个位于System.Windows.Input.Manipulations命名空间内的独立WPF程序集。通过这个程序集,可以利用与WPF交互无关的纯数学计算方式实现多点漫游元素功能。只需向ManipulationProcessor2D提供多点的Id、时间和坐标信息,就可以利用Manipulatio

    WPF样式与模板区别与应用解析
    WPF样式与模板区别与应用解析

    样式用于统一控件的外观属性,模板则定义控件的内部结构,两者通过Style设置Template属性和TemplateBinding协同工作,实现灵活的UI定制。

    WPF树形数据绑定实现方法
    WPF树形数据绑定实现方法

    答案是通过定义包含ObservableCollection子节点集合和INotifyPropertyChanged支持的数据模型,结合HierarchicalDataTemplate的ItemsSource绑定子节点路径,实现WPF树形结构数据绑定。具体步骤包括:创建自引用的TreeNode类,其中Children为ObservableCollection类型以支持动态更新;在XAML中使用TreeView控件并设置ItemsSource绑定根节点集合;通过HierarchicalDataTemplate

    WPF跨窗口数据共享方法解析
    WPF跨窗口数据共享方法解析

    WPF跨窗口数据共享的常见模式包括:1.MVVM架构下通过共享服务或单例ViewModel实现解耦的数据交互;2.事件聚合器模式利用消息总线实现组件间松耦合通信;3.直接传递数据对象于窗口构造函数或属性中,适用于简单场景;4.静态类或单例存储全局状态,但易导致高耦合与测试困难。其中,推荐在复杂应用中采用MVVM结合共享服务的方式,通过UserService等中心化服务管理数据,确保所有ViewModel操作同一数据源,并借助INotifyPropertyChanged和ObservableCollecti

    WPF中DispatcherUnhandledException的作用是什么?
    WPF中DispatcherUnhandledException的作用是什么?

    DispatcherUnhandledException是WPF中用于全局捕获主线程未处理异常的机制,可通过订阅该事件记录错误、显示友好消息并设置e.Handled=true来防止应用崩溃;2.避免过度使用的方法是优先在局部用try-catch处理异常,仅将全局处理作为最后防线,用于无法预知或跨区域的异常场景;3.DispatcherUnhandledException与TaskScheduler.UnobservedTaskException的区别在于前者处理UI线程异常,后者处理未被await或Res

    MVVMLight入门:概念与架构解析
    MVVMLight入门:概念与架构解析

    大家好,我是架构君,一个会编程也爱吟诗的架构师。今天分享MVVMLight学习笔记(一)—MVVMLight概述,希望对大家有所帮助!一、MVVM概述MVVM,即Model-View-ViewModel的缩写,其核心目标是将视图(View)与模型(Model)分离开来。MVVM结构示意如下:与传统将逻辑结构置于CodeBehind的做法相比,MVVM模式通过数据绑定和命令绑定,有效地解耦了视图和业务逻辑。ViewModel中的属性变更会通知到前端视图,确保前端实时更新。二、MVVMLight概述MVVM

    WPF文字描边实现方法详解
    WPF文字描边实现方法详解

    在WPF中实现文字描边的方法有多种,本文将探讨如何通过将文字转换为Geometry来实现这一效果。以下是详细步骤和方法:前言WPF的TextBlock提供了多种常用的文字修饰功能,足以满足日常需求。然而,若需更丰富的表现方式,WPF提供了更复杂但功能强大的工具。例如,实现文字描边就有几种方法可以达到效果。本文将简要介绍这些实现文字描边的手法。将文字转换为Geometry实现文字描边的关键是使用FormattedText将文字转换为Geometry,然后通过其他技术为Geometr

    typora怎么高亮 文本标记语法设置
    typora怎么高亮 文本标记语法设置

    本教程演示如何在 Windows 版 Typora 中开启 Highlight 高亮功能,通过双等号语法标记重点文本,并展示如何编辑、取消高亮及验证源码保存状态。

    讯飞智作平台 在线创作功能介绍
    讯飞智作平台 在线创作功能介绍

    了解讯飞智作平台的在线创作流程:从文字配音到数字人视频生成,再到AIGC工具箱的素材处理。通过具体案例演示如何选择合适的功能入口、调整参数及核对成品权益,适合需要快速制作音频或播报视频的用户参考。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。