1. 前言

微软在Build 2017中公布了新的设计语言Fluent Design System(以下简称FDS),不过官网只是堆砌了各种华丽的词语以及一堆动画。至于在UWP中要做成怎么样,怎么做,可以参考这个视频:
Build Amazing Apps with Fluent Design - Build 2017

视频中使用BuildCast这个示例应用详细展示了Fall Creators Update(16299)中如何实现FDS以及其它FCU的新API,极具参考价值。

或者参考开发人员官网,这里详细介绍了FDS的五大核心主题(Material(材质)、Light(光照)、Depth(深度)、Motion(动态)和 Scale(伸缩性))相关功能及使用规范。

好像没见到专门提供给设计人员的FDS指南?

2. Fall Creators Update中的Fluent Design System

本文主要介绍微软在Fall Creators Update中主打的各种FDS特效、控件。

2.1 Material

材质是FDS最好玩的主题,以往主推的Metro强调去材质化,现在又重新提把材质捡回来。不过目前FDS中材质的应用场景有明确规定,并不是和以前材质化泛滥时一样连所有按钮都材质化。从材质的回归可以看出UWP的承载主体已经从屏幕延伸到MR。

Acrylic是目前FDS主打的材质。在Fall Creators Update之前计算器等几个应用已经用上了这个特效,效果看起来还不错。Acrylic除了负责展现材质化的效果,还负责营造有深度的UI。简单来说Acrylic只是一个Brush,UWP提供了一组Acrylic Brush给开发者使用,通过ThemeResource找到资源名字中包含“Acrylic”的Brush即可轻松在应用中使用Acrylic,代码如下:

<Grid Background="{ThemeResource SystemControlAcrylicElementBrush}">

Acrylic包含两种。

  • Background acrylic 透视整个应用UI,可以看到应用窗体后的其它应用或桌面(在ThemeResource中名称包含 -AcrylicWindow-)。

  • In-app acrylic 只透视套用了acrylic brush的元素(在ThemeResource中名称包含 -AcrylicElement-)。

2.2 Light

UWP使用CompositionLight可以制造很多很有趣的光照效果,FDS主打的光照特效是Reveal,在FCU中大部分Items Control(ListView、GridView等)都默认启用了Reveal特效,一些Button控件也可以通过套用Style启用这个特效。

<Button Content="Button Content" Style="{StaticResource ButtonRevealStyle}"/>

Reveal最大的特点是鼠标靠近时控件的边框会被照亮,这对于无边框按钮或ListViewItem可以在不破坏其简约设计的前提下提示其可操作区域。(或许在MR中Reveal有更多的应用场景。)

2.3 Depth

即使在强调扁平化的时代,深度仍是设计师关心的一个主题。FCU中除了使用Acrylic营造有深度的UI,还新增了ParallaxView控件,可以制作简单的视差滚动效果。

<ParallaxView x:Name="parallaxView"Source="{Binding ElementName=listView}"VerticalAlignment="Top"HorizontalAlignment="Left"VerticalShift="50"><Image Source="ms-appx:///Assets/cliff.jpg" />
</ParallaxView>
<ListView x:Name="listView"HorizontalAlignment="Stretch"VerticalAlignment="Top"Background="#80000000"><x:String>Item 1</x:String><x:String>Item 2</x:String><x:String>Item 3</x:String>...<ListView.ItemTemplate><DataTemplate><TextBlock Text="{Binding}"Foreground="White" /></DataTemplate></ListView.ItemTemplate>
</ListView>

2.4 Motion

UWP控件自带的动画已经不少,Connected animations则更进一步。Connected animations通常用于在导航中引导视觉,定位操作对象。

比起默认的写法,我更喜欢UWP Community Toolkit封装好的 Connected Animations 附加属性。只需在源页面和目标页面的操作对象使用相同的Connected.Key即可轻松实现Connected animations。

MotionPage.xaml

<Border Height="100"Width="100"Background="{ThemeResource SystemControlForegroundAccentBrush}"VerticalAlignment="Center"HorizontalAlignment="Center"animations:Connected.Key="item"Tapped="Border_Tapped" />

MotionPage.xaml.cs

navigationService.NavigateToPage<ConnectedAnimations2ndPage>();

ConnectedAnimations2ndPage.xaml

<Border x:Name="HeroElement"Height="300" Width="300"Background="{ThemeResource SystemControlForegroundAccentBrush}"animations:Connected.Key="item"/>

2.5 Scale

在FDS中,伸缩性这个主题比较特殊。它没有主打的控件或API,简单地理解成适应各种屏幕尺寸的响应式设计也可以,但我更愿意将它的主旨理解成设计可以在0D到3D的形式中延伸,即可以适应从语言到鼠标、键盘、触摸、MR等各种形式的输入和输出。

对设计师和开发人员来说这个主题可能不太有趣,毕竟它看起来只是繁琐,一点都不华丽。但我觉得重申这个主题十分重要,UWP诞生的目的就是为了打造能在各种设备上运行的通用应用,伸缩性对UWP至关重要。即使只针对桌面设备,能有各种输入方式对可用性都有很大提高。可惜随着最近移动系统的流行,设计师越来越习惯设计只针对触摸的UI,连带影响到桌面应用,快捷键越来越少,有些设计师甚至拒绝提供按钮的PointerOver效果。希望随着设计规范及控件的完善这个问题能有所改善吧。

3. 在Fall Creators Update中升级应用

在Fall Creators Update中只需要修改导航及标题栏,应用的UI即可有大幅提升。

3.1 使用NavigationView更新导航菜单

以前很多教程都专门讲解了怎么制作汉堡包菜单,现在UWP终于提供了默认方案。NavigationView是Fall Creators Update提供的新导航菜单,它应用了FDS最常用的两个特效:Acrylic和Reveal,可以折叠及最小化,使用简单:

<NavigationView IsSettingsVisible="True"x:Name="NavigationView"AlwaysShowHeader="False"ItemInvoked="NavigationView_ItemInvoked"x:FieldModifier="Public"><NavigationView.MenuItems><NavigationViewItem Content="Material"IsSelected="True"><NavigationViewItem.Icon><FontIcon FontFamily="Segoe MDL2 Assets"Glyph="" /></NavigationViewItem.Icon></NavigationViewItem><NavigationViewItem Content="Light"><NavigationViewItem.Icon><FontIcon FontFamily="Segoe MDL2 Assets"Glyph="" /></NavigationViewItem.Icon></NavigationViewItem><NavigationViewItem Content="Motion"><NavigationViewItem.Icon><FontIcon FontFamily="Segoe MDL2 Assets"Glyph="" /></NavigationViewItem.Icon></NavigationViewItem><NavigationViewItem Content="Depth"><NavigationViewItem.Icon><FontIcon FontFamily="Segoe MDL2 Assets"Glyph="" /></NavigationViewItem.Icon></NavigationViewItem><NavigationViewItem Content="Scale"><NavigationViewItem.Icon><FontIcon FontFamily="Segoe MDL2 Assets"Glyph="" /></NavigationViewItem.Icon></NavigationViewItem></NavigationView.MenuItems><Frame x:Name="RootFrame"Navigated="RootFrame_Navigated"></Frame>
</NavigationView>

3.2 将内容扩展到标题栏

在程序启动或每次更改主题颜色时调用SetupTitlebar()这个函数,注意要根据当前主题颜色改变TitleBar上按钮的颜色(因为官方文档上没有,所以很多人会忘了处理按钮的颜色):

private static void SetupTitlebar()
{if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.ApplicationView")){var titleBar = ApplicationView.GetForCurrentView().TitleBar;if (titleBar != null){titleBar.ButtonBackgroundColor = Colors.Transparent;if (TrueTheme() == ElementTheme.Dark){titleBar.ButtonForegroundColor = Colors.White;titleBar.ForegroundColor = Colors.White;}else{titleBar.ButtonForegroundColor = Colors.Black;titleBar.ForegroundColor = Colors.Black;}titleBar.BackgroundColor = Colors.Black;titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;titleBar.ButtonInactiveForegroundColor = Colors.LightGray;CoreApplicationViewTitleBar coreTitleBar = TitleBarHelper.Instance.TitleBar;coreTitleBar.ExtendViewIntoTitleBar = true;}}
}public static ElementTheme TrueTheme()
{var frameworkElement = Window.Current.Content as FrameworkElement;return frameworkElement.ActualTheme;
}

主页中使用TextBlock代替应用标题:

<TextBlock x:Name="WindowTitle"Style="{ThemeResource CaptionTextBlockStyle}"Visibility="{x:Bind TitleHelper.TitleVisibility, Mode=OneWay}"Margin="{x:Bind TitleHelper.TitlePosition, Mode=OneWay}"VerticalAlignment="Top"Text="{x:Bind appmodel:Package.Current.DisplayName}" />

我自己的ColorfulBox应用在使用上述方案升级后外观有了不少改善(请忽略标题没有垂直居中这个小错误):

(待续...)

转载于:https://www.cnblogs.com/dino623/p/FluentDesignSystem.html

[UWP]如何使用Fluent Design System (上)相关推荐

  1. Microsoft Fluent Design System

    转载自:http://www.ui.cn/detail/131217.html 就在刚刚举办的 Microsoft Build 2017 中,微软对外公布了它们最新的设计语言--"Fluen ...

  2. Fluent Design System 设计语言元素

    Fluent Design System 设计语言共有元素,分别为光照(Light).深度(Depth).运动(Motion).材质(Material)和缩放(Scale),目前包括人脉.计算器和 G ...

  3. Windows Store获得Fluent Design加成

    微软在Windows 10秋季创作者更新中引入了全新的Fluent Design System设计语言.在确保系统稳定流畅的前提下最早出现在Windows Vista系统中的"毛玻璃&quo ...

  4. 用于Fluent Design的UWP社区工具包蓄势待发

    Microsoft继续为即将推出Windows 10"秋季创作者更新"(FCU,Fall Creators Update)在做着准备工作,其中部分工作是目前正在开展的开发者工具和资 ...

  5. 云之幻哔哩哔哩uwp_[UWP]推荐一款很Fluent Design的bilibili UWP客户端 : 哔哩

    UWP已经有好几个Bilibili的客户端,最近又多了一个: 作者云之幻是一位很擅长设计的UWP开发者,我也从他那里学到了很多设计方面的技巧.它还是一位Bilibili的Up主,主打PowerPoin ...

  6. 什么是 Design System

    因为研究 Design System,无意中发现了这本「Design Systems」.本来只是期望着看看别人的思路和想法,粗略的看了几个章节才发现自己错了.这本似乎并不太火的书可以说是目前市面上对整 ...

  7. Fluent Design单选按钮,复选框,选择框,Java菜单

    这次我对JMetro进行了重大更新. 3.8版引入了以下新的Fluent Design (FDS)启发风格(深色和浅色)和更新: 新的单选按钮样式: 复选框的新样式: 菜单的新样式: 更新了上下文菜单 ...

  8. sketch里的ios控件_使用Sketch建立Design System

    一. 有关Design System 之前的文章<使用Adobe XD建立Design System>中介绍了什么是Design System,它有什么用,在设计的哪个阶段使用以及如何用A ...

  9. 将ADS(Advanced Design system)中的版图导入到AD(Altium Designer)中编辑

    前言 先进设计系统 Advanced Design system(ADS)Agilent Technologies 是领先的电子设计自动化软件,适用于射频.微波和信号完整性应用. AD全名Altium ...

最新文章

  1. Kotlin应用开发初体验
  2. 网络推广费用之你的文章标题优化“合格”了吗?
  3. Python开发技巧-使用Python生成HTML表格
  4. RxSwift之UI控件UIActivityIndicatorView与UIApplication扩展的使用
  5. lambda设计模式_使用lambda的装饰器设计模式
  6. [vue] vue项目有使用过npm run build --report吗?
  7. java if 定义变量_java – 如何分配在if else语句中定义的变量
  8. (十三)linux中断底半部分处理机制
  9. 【文本匹配】cqrctr:文本匹配的破城长矛
  10. easyui图标对照 --由于文章历史久远, 博主放弃治疗了
  11. icassp2021论文集下载
  12. Android锁屏的实现与难点总结
  13. 用python处理excel数据、求线性回归方程的r值_Python 线性回归计算r-squared方法
  14. 酒店标识的要求不同其设计也不同
  15. 使用pyaudio播放无损音乐(wav)
  16. 1758 生成交替二进制字符串的最少操作数
  17. manjar强制关闭应用
  18. 项目团队效能的影响因素及其生成关系模型
  19. 安卓adb截屏java_Android 截屏的各种骚操作
  20. 用matlab实现运筹学最短路问题,运筹学 最短路问题.ppt

热门文章

  1. 三分钟搞定一个网页原型设计
  2. 百度翻译接口测试(3)-最终篇
  3. 【健康】血常规指标入门
  4. 崴脚后会静脉曲张吗?
  5. autocad不能画图_Autocad中的文字样式及标注样式设置
  6. python web py入门(13)- 实现发贴到论坛
  7. keyword笔记(zz)
  8. Ocelot参考文章
  9. 笔记本计算机在桌面显示器,能把笔记本电脑屏幕投到显示器上吗
  10. 以太坊:普通人的电子纹身