如何在 Windows 10 创意者更新中使用 Acrylic Accent?

2024-03-11

我找不到任何使用 Acrylic Accent 的详细文档(创建背景画笔 https://learn.microsoft.com/en-us/uwp/api/Windows.UI.Composition.Compositor)。我找到了一个post https://stackoverflow.com/questions/43208841/how-to-use-acrylic-accent-createhostbackdropbrush-in-windows-10-creators-upd在 StackOverflow 中,这有点有用,但对入门没有帮助。所以请为这篇文章创建一个详细的答案,以便大家学习。

Update:

微软官方已经发布了亚克力材质 https://learn.microsoft.com/en-us/windows/uwp/style/acrylic文档

Note:

If anyone doesn't know about Acrylic Accent. Acrylic Accent is the new feature in Windows 10 Creators Update that allows the app background to be Blurred and Transparent.enter image description hereenter image description here


创作者更新

XAML

您需要使用放置在应用程序背景上的组件,比方说RelativePanel

<RelativePanel Grid.Column="0" Grid.ColumnSpan="2" MinWidth="40" x:Name="MainGrid" SizeChanged="Page_SizeChanged"/>
<RelativePanel Grid.Column="0" Width="{Binding ElementName=MainGrid,Path=Width}" Background="#28000000"/>
<Grid>
    <!--Having content here, for example textblock and so on-->
</Grid>

第二RelativePanel用于设置模糊上方的阴影颜色。

.CS

然后您可以使用以下代码:

private void applyAcrylicAccent(Panel panel)
{
    _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
    _hostSprite = _compositor.CreateSpriteVisual();
    _hostSprite.Size = new Vector2((float) panel.ActualWidth, (float) panel.ActualHeight);

    ElementCompositionPreview.SetElementChildVisual(panel, _hostSprite);
    _hostSprite.Brush = _compositor.CreateHostBackdropBrush();
}
Compositor _compositor;
SpriteVisual _hostSprite;

并调用它applyAcrylicAccent(MainGrid);您还需要处理 SizeChanged 事件:

private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
{
    if (_hostSprite != null)
        _hostSprite.Size = e.NewSize.ToVector2();
}

当然,您需要使用 Creator Update 才能运行此命令,CreateHostBackdropBrush() 无法在移动设备或平板电脑模式下运行。

另外,请考虑您使用丙烯酸颜色设置的面板或网格将无法显示任何控件(据我测试过)。因此,您需要使用相关面板,而无需对其进行任何控制。

透明标题栏

可以使用以下代码设置标题栏的透明度

ApplicationViewTitleBar formattableTitleBar = ApplicationView.GetForCurrentView().TitleBar;
formattableTitleBar.ButtonBackgroundColor = Colors.Transparent;
CoreApplicationViewTitleBar coreTitleBar = CoreApplication.GetCurrentView().TitleBar;
coreTitleBar.ExtendViewIntoTitleBar = true;

Here a example of what the above code generate (with some other things added too.)Example

秋季更新 10.0.16190 及更高版本

正如 Justin XL 在下面的答案中提到的,从 Build 16190 及更高版本开始,开发人员可以访问位于以下位置的不同丙烯酸画笔:Windows.UI.Xaml.Media (亚克力API https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.acrylicbrush)以及 Microsoft 的指南:亚克力材料指南 https://learn.microsoft.com/en-us/windows/uwp/style/acrylic

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 10 创意者更新中使用 Acrylic Accent? 的相关文章

  • 为什么 GetThreadTimes 返回

    我试图测量线程中花费的时间以用于进度报告目的 但我从 GetThreadTimes 系统调用中得到非常奇怪的结果 给出以下程序 在 VS 2013 中编译 针对 NET 4 5 using System using System Diagn
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • 使物体跟随旋转且差异很小

    我正在使我的对象跟随另一个对象的旋转 我希望我的对象以很小的差异旋转 也就是说 从当前的旋转来看 它不应该与另一个对象完全旋转 其旋转应该存在差异 使其旋转主要对象旋转的 10 我该怎么做呢 using System Collections
  • 时间跨度格式[重复]

    这个问题在这里已经有答案了 当您将时间跨度声明为以下形式时 如何优雅地格式化时间跨度以表示 1 小时 10 分钟 TimeSpan t new TimeSpan 0 70 0 我当然知道你可以为此做一些简单的数学计算 但我有点希望 NET
  • C++ Socket选择和接收问题

    下面是我在套接字编程方面遇到问题的代码片段 在此之后select调用 如果我不在第 9 行放置睡眠 则在 Windows XP 上 第 11 行收到 1 个字节 而不是从服务器作为整数发送 4 个字节 当我检查 xmlSize 时 它 被设
  • 使用加法求阶乘

    我正在尝试创建一个 C 代码来查找整数的阶乘 以便我可以将代码转换为汇编语言 我的代码似乎将第二个整数 乘 两次 即 5 4 4 3 我似乎无法找出原因 请帮助 define N 5 int main int j 0 int i 0 int
  • 使用 LINQ 获取二维数组的最大列数

    无论如何 有没有使用 LINQ 来获取二维数组每列的最大值 假设我有以下内容 var arrays new double 5 100 我想获得最大的arrays 0 arrays 1 arrays 4 如何使用LINQ来做呢 我可以使用这样
  • GetWindowText() 抛出错误并且没有被 try/catch 捕获

    当我为 GetWindowText 运行下面的代码时 我收到作为内部异常抛出的以下错误 尝试读取或写入受保护的内存 这通常表明其他内存已损坏 DllImport user32 dll EntryPoint GetWindowTextLeng
  • 使用无状态会话延迟查找字典值

    在我的应用程序中 我设置了一个三元字典映射 以便对于给定用户 我可以检索属于该用户的对象的每个实例的 设置 也就是说 我有类似的东西 public class User public virtual IDictionary
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

    我有一个关于从 C 代码将 xml 数据类型传递给查询的问题 首先 这是 SQL Server 上的一个表 CREATE TABLE dbo XmlTable id int IDENTITY 1 1 NOT NULL dat xml NOT
  • 网络驱动器在启动时不可用

    我有一个 C 应用程序 它在启动时加载 并将数据记录到网络驱动器 该驱动器安装为 X 当机器首次启动时 应用程序会抛出 X 不可用的错误 如果我重新启动应用程序 也会出现同样的错误 但是 如果我打开 Windows 资源管理器并双击浏览驱动
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • 创建一个重复 char n 次的编译时字符串

    我正在使用这样的函数将数据导出到 xml 文件中 注意 愚蠢的示例 void write xml file const std string path using namespace std string view literals Use
  • 实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

    我正在使用 MVC3 和实体框架 在我的应用程序中 我需要通过 EF 调用 SQL Server 2005 中的存储过程来根据以下内容搜索一些数据datetime传递的参数 在当地环境中一切似乎都运行良好 但是将其托管到 IIS 后 我在尝
  • 当从字符串文字初始化 char 数组时会发生什么?

    据我了解 以下代码的工作原理如下 char cptr Hello World Hello World 住在 rodata程序内存的一部分 字符串文字 Hello World 返回一个指向字符串基地址的指针 或者所谓 数组 中第一个元素的地址
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • 使用 Boost::Spirit 解析 time_period 表达式

    我需要使用 Boost Spirit 解析以下 EBNF 表达式 period date part time part date part time part time part hours minutes seconds date par

随机推荐