[UWP]使用Acrylic(亚克力)

简介: 原文:[UWP]使用Acrylic(亚克力)1. 前言 在 如何使用Fluent Design System 这篇文章里已经简单介绍过Reveal的用法,这篇再详细介绍其它内容。 自Windows 8 放弃Aero后,群众对毛玻璃回归的呼声一致都很大。
原文: [UWP]使用Acrylic(亚克力)

1. 前言

如何使用Fluent Design System 这篇文章里已经简单介绍过Reveal的用法,这篇再详细介绍其它内容。
自Windows 8 放弃Aero后,群众对毛玻璃回归的呼声一致都很大。Fluent Design System带来了新的透明背景Acrylic,提供更好的性能及更时髦的外观。(不过由于使用简单,可以预见滥用已经不可避免。)

2. 使用Acrylic

2.1 在XAML中使用Acrylic

UWP提供了一组已定义好的Acrylic Brush供开发者使用,通过ThemeResource找到资源名字中包含“Acrylic”的Brush即可轻松在应用中使用Acrylic,代码如下:

<Grid Background="{ThemeResource SystemControlAcrylicElementBrush}">

可用的ThemeResource详见官方文档
img_364e1f13c0d0f4e901497593c44003b7.png

Acrylic具体来说包含两种:

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

img_b007a87fa56b33de7581e5529b190b5e.png

img_3d2fea415546d4d7b7f7d7c29569c7bc.png

2.2 正确使用Acrylic

现阶段常见的应用都只使用了Background acrylic,很少见In-app acrylic的应用场景。

Background acrylic常见的应用场景包括:

  1. 作为导航菜单的背景:
    img_b80b6b2b9ca3935f5cb7d252e4c86c4e.png

  2. Widget或轻量级应用可以在整个应用的背景使用Acrylic,像计算器那样:
    img_9d47ea25508147129572bdd2617de494.png

In-app acrylic的应用场景目前通常都是弹出的Modal Layer,或者Flyout的背景:

img_341797e48e3d0213ba7453498bab88e9.png

3. 自定义AcrylicBrush

可以使用TintColor(颜色)、TintOpacity(不透明度)、BackgroundSource(background 或者 in-app acrylic类型)、FallbackColor这四个属性自定义AcrylicBrush。

<AcrylicBrush x:Key="CustomAcrylicBackgroundBrush"
              BackgroundSource="HostBackdrop"
              TintOpacity="0.8"
              TintColor="#FF1F1F1F" />

<AcrylicBrush x:Key="CustomAcrylicInAppBrush"
              BackgroundSource="Backdrop"
              TintOpacity="0.8"
              TintColor="#FF1F1F1F" />

其中FallbackColor是指当background acrylic不生效时(运行于节电模式、根据设置不激活Acrylic或运行于XBOX等设备)的替代颜色。当窗口处于非激活状态时也会使用FallbackColor代替AcrylicBrush。

img_9bae25ae5306047664e8186bf08ab336.gif

4 Acrylic与Depth

在Fluent Design System的五个话题中,Acrylic同时隶属于Material和Depth话题中,半透明的背景可以透视到处于Z轴下一层的内容,从而营造出深度的效果。

img_92b8dda7ef420cb0be52d2ca564feed7.gif

具体来说可以在应用内将当弹出的Modal Layer背景设为In-app acrylic,配合ScalarAnimation制作出内容向后缩退的感觉:

<Grid Height="600"
      Width="800">
    <ScrollViewer HorizontalScrollBarVisibility="Hidden"
                  VerticalScrollBarVisibility="Hidden"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center">

        <Image Source="ms-appx:///Assets/IMG_20180115_182131.jpg"
               Height="600"
               Width="800">

            <Custom:Interaction.Behaviors>
                <Custom1:Scale x:Name="ImageScale"
                               ScaleX="1.1"
                               ScaleY="1.1"
                               CenterX="400"
                               CenterY="300"
                               Duration="500" />
            </Custom:Interaction.Behaviors>
        </Image>
    </ScrollViewer>
    <Button Style="{StaticResource ButtonRevealStyle}"
            Content="Save To..."
            HorizontalAlignment="Left"
            VerticalAlignment="Bottom"
            Background="Transparent"
            Margin="20"
            FontSize="30"
            Click="OnSave" />
    <Grid Background="{StaticResource ModalAcrylicInAppBrush}"
          Visibility="Collapsed"
          x:Name="ModalLayer">
        <animations:Implicit.ShowAnimations>

            <animations:OpacityAnimation Duration="0:0:1"
                                         From="0"
                                         To="1.0"></animations:OpacityAnimation>
        </animations:Implicit.ShowAnimations>

        <animations:Implicit.HideAnimations>
            <animations:ScalarAnimation Target="Opacity"
                                        Duration="0:0:1"
                                        To="0.0"></animations:ScalarAnimation>

        </animations:Implicit.HideAnimations>
        <Button Style="{StaticResource ButtonRevealStyle}"
                Content="Save"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Background="Transparent"
                Margin="20"
                FontSize="30"
                Click="OnSaved" />
    </Grid>
</Grid>
private void OnSave(object sender, RoutedEventArgs e)
{
    ModalLayer.Visibility = Visibility.Visible;
    ImageScale.ScaleX = 1;
    ImageScale.ScaleY = 1;
}

private void OnSaved(object sender, RoutedEventArgs e)
{
    ModalLayer.Visibility = Visibility.Collapsed;
    ImageScale.ScaleX = 1.1;
    ImageScale.ScaleY = 1.1;
}

img_c3289b738666654ed37691632e1778b8.gif

希望将来能看到更多为营造有深度的UI而使用的Acrylic,不要为了让UI闪闪发光就滥用。

5. 其它

5.1 Acrylic没有生效及其它各种问题

如何使用Fluent Design System (下)里详细介绍了Acrylic没有生效的各种情况,也介绍了正确使用Acrylic的方式及版本兼容代码,这里不再累赘。

5.2 窗口处于非激活状态

当窗口处于非激活状态background acrylic会失效并使用FallbackColor所指定的纯色背景代替。有些应用在导航、弹出提示或最大化/还原时会让窗口一时失去焦点,这样就造成使用了background acrylic的地方(通常是整个导航菜单)意外地闪烁了一下。老是这样还挺烦人的要谨慎处理。

6. 结语

其实Acrylic并不是那么好用,还很容易滥用,尤其见到某些应用在整个背景都使用了Acrylic,但又处理不好内容的显示,导致文字等内容的识别率下降。如何正确使用微软提供的这件武器是值得设计师深思熟虑的一件事。

顺便一提,上篇文章 使用Reveal 本打算尽量写得简洁些结果马上被移出首页,好为难。于是这篇文章本打算再多写一些,但昨晚家里的爱机升天了,看来连天都要阻止我婆婆妈妈。

参考中给出的链接都是些很有趣的内容,不妨一看。

7. 参考

Acrylic material
From 3D to 2D and back again – Microsoft Design
Digital Design is Never Done – Microsoft Design
How to use Acrylic Accent in Windows 10 Creators Update - Stack Overflow

8. 源码

Fluent Design System Sample

目录
相关文章
|
前端开发 UED
[UWP]不那么好用的ContentDialog
原文:[UWP]不那么好用的ContentDialog ContentDialog是UWP开发中最常用的组件之一,一个体验良好的UWP应用很难避免不去使用它。博客园里也有许多的文章介绍如何来利用ContentDialog实现各种自定义样式的弹窗界面。
1338 0
[UWP]了解IValueConverter
原文:[UWP]了解IValueConverter 1. 前言 IValueConverter是用于数据绑定的强大的武器,它用于Value在Binding Source和Binding Target之间的转换。
974 0
|
C# 程序员
[UWP]做个调皮的BusyIndicator
原文:[UWP]做个调皮的BusyIndicator 1. 前言 最近突然想要个BusyIndicator。做过WPF开发的程序员对BusyIndicator应该不陌生,Extended WPF Toolkit 提供了BusyIndicator的开源实现,Silverlight Toolkit也有一个,这次想要把这个控件移植到UWP中。
932 0
|
C# Windows 开发工具
WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)
原文 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0。
1959 0
|
C#
用WPF轻松打造iTunes CoverFlow效果
原文:用WPF轻松打造iTunes CoverFlow效果                                     用WPF轻松打造iTunes CoverFlow效果                                                       周银辉...
888 0
|
搜索推荐 API 开发者
简单说一下UWP中的JumpList
原文:简单说一下UWP中的JumpList   在Windows10的10856这个版本中,微软为桌面版提供了一组新的应用交互方式,磁贴和Toast通知的个性化都有了一定的改善。针对磁贴方面,微软为我们提供了一组新的API来扩充我们对应用的交互方式——JumpList。
835 0
|
API C# Windows
起调UWP的几种方法
原文:起调UWP的几种方法 由于种种原因吧,我需要使用一个WPF程序起调一个UWP程序,下面总结一下,给自己个备份。 启动UWP程序的关键是协议启动 给我们的UWP应用添加一个协议,like this: 然后使用协议启动该UWP有一下几种方式: 1.
1027 0
|
前端开发
win10 UWP 蜘蛛网效果
原文:win10 UWP 蜘蛛网效果 我看见了知乎首页登录背景和普通的地球人写的博客,发现了个好看的效果。 那么我来告诉大家如何做这个效果。
1132 0
|
数据安全/隐私保护 安全 API
win10 uwp ApplicationView
原文:win10 uwp ApplicationView 本文和大家介绍一个重要的类,他可以用来设置窗口,如设置启动大小,设置是否允许截图,是否进入全屏,所有和窗口有关的,都可以在他这里设置。
1210 0
|
C# 开发者
[UWP]了解模板化控件(5):VisualState
原文:[UWP]了解模板化控件(5):VisualState 1. 功能需求 使用TemplatePart实现上篇文章的两个需求(Header为空时隐藏HeaderContentPresenter,鼠标没有放在控件上时HeaderContentPresent半透明),虽然功能已经实现,但这样实现的话基本上也就别想扩展了。
1208 0