UWP 有没有办法为整个应用程序禁用 Acrylic 并始终使用后备颜色?

赫兹

我目前正在开发一个 UWP 应用程序,它看起来像这样,左侧面板上有亚克力: 我的应用程序的图片

现在,当我在笔记本电脑上启用省电模式时,亚克力会被替换为它的后备颜色:

省电图

现在我想要在我的应用程序的设置屏幕中使用一个选项来禁用整个应用程序中的亚克力,并始终使用后备颜色。但是,我不确定从哪里开始。这看起来很有希望,但我不确定如何实现它,而不必检查应用程序中的每个丙烯酸材料并添加代码以禁用它。

是否有可以用来执行此操作的顶级设置?谢谢。

Richard Zhang - MSFT

您可以使用CustomResource来决定如何显示您的 AcrylicBrush:

准备

在问题描述中,您需要一个顶级设置来切换亚克力效果。在这里您可以使用LocalSettings.

工具.cs

public class Tool
{
    public static void WriteLocalSetting(string key, object value)
    {
        var localSetting = ApplicationData.Current.LocalSettings;
        localSetting.Values[key.ToString()] = value;
    }
    public static object GetLocalSetting(string key, object defaultValue)
    {
        var localSetting = ApplicationData.Current.LocalSettings;
        bool isKeyExist = localSetting.Values.ContainsKey(key.ToString());
        if (isKeyExist)
        {
            return localSetting.Values[key.ToString()];
        }
        else
        {
            WriteLocalSetting(key, defaultValue);
            return defaultValue;
        }
    }
}

定义

根据CustomResource的文档,您需要创建一个派生类。

public class CustomResourceLoader : CustomXamlResourceLoader
{
    protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
    {
        if (resourceId == "MyBackground")
        {
            bool isUseAcrylic = (bool)Tool.GetLocalSetting("IsUseAcrylic", true);
            var brush = new AcrylicBrush();
            brush.TintColor = Colors.White;
            brush.BackgroundSource = AcrylicBackgroundSource.HostBackdrop;
            brush.TintOpacity = 0.7;
            brush.FallbackColor = Colors.White;
            brush.AlwaysUseFallback = !isUseAcrylic;
            return brush;
        }
        return null;
    }
}

用法

应用程序.xaml.cs

public App()
{
    // ...
    CustomXamlResourceLoader.Current = new CustomResourceLoader();
}

主页

<Grid Background="{CustomResource MyBackground}">
    <ToggleSwitch Toggled="ToggleSwitch_Toggled"/>
</Grid>
private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
{
    Tool.WriteLocalSetting("IsUseAcrylic", (sender as ToggleSwitch).IsOn);
    // Need Re-render
}

需要注意的是,运行时切换不会影响已经渲染的元素。修改完成后,可以弹出MessageDialog要求用户重启应用重新渲染。

谢谢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法使用Powershell重置UWP应用?

有没有办法调整 UWP 应用程序的大小并使其居中?

有没有办法使用Windows Server将R Shiny应用程序部署为网页?

有没有办法使用逻辑应用程序将新的Blob创建为文件夹?

有没有办法在 Xamarin 应用程序中使用 Olive 框架?

有没有办法在React Native应用程序中使用我的Python代码?

有没有办法使用 JavaScript 在其默认应用程序中打开文件?

有没有办法使用powershell点击应用程序中的按钮

有没有办法在使用 Identity 时通过 userId 搜索应用程序的用户?

有没有办法使用 TFS CLI 搜索和提取应用程序版本?

有没有办法使用Android应用程序登录网站(例如gmail)?

有没有办法限制 c++ 应用程序使用的 CPU 数量

有没有办法使用 SCSS 向我的应用程序添加暗模式?

有没有办法在Django应用程序之外使用反向功能?

有没有办法使用Tomcat API从应用程序内部重新启动Web应用程序?

当运行新的 uwp 应用程序作为旧应用程序的更新时,有没有办法在安装时不删除本地状态?

有没有办法在没有完整 VM 的情况下使用 Amazon AWS 为 Web 应用程序保留文件?

有没有办法在同一应用程序中为管理员使用不同的模块?

有没有办法为整个npm项目使用全局变量?

有没有办法使用默认的 iOS 设置屏幕模块在应用程序中构建它?

有没有办法知道我的flutter应用程序使用哪个Android API版本?

Windows-有没有办法查看哪些应用程序产生/使用哪些进程?

有没有办法使用 Windows Server 2008 上的 Web 应用程序的外部工具编辑 dll

有没有办法在我的 sinatra 应用程序中使用不同的 mime 类型

在 C# windows 窗体应用程序中,有没有办法使用整数访问按钮?

有没有办法使用sqflite在flutter应用程序中检查数据库版本?

有没有办法避免在CEF Windows Chromium桌面应用程序中使用X-Frame-Options?

有没有办法使用 WebStorm 中的调试器单步调试 RunJS 应用程序

有没有办法使用普罗米修斯检查 nodejs 应用程序是否存活?