首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP是否有一种方法可以禁用整个应用程序的丙烯酸,并始终使用回退颜色?

UWP是否有一种方法可以禁用整个应用程序的丙烯酸,并始终使用回退颜色?
EN

Stack Overflow用户
提问于 2020-05-23 22:02:56
回答 2查看 141关注 0票数 0

我目前正在开发一个UWP应用程序,其外观类似于左边面板上的丙烯酸:

现在,当我在我的笔记本电脑上启用省电模式时,丙烯酸会被它的后备颜色所取代:

现在我希望在我的应用程序的设置屏幕上有一个选项,在整个应用程序中禁用丙烯酸,并始终使用回退颜色。不过,我不知道从哪里开始。这似乎很有希望,但我不知道如何实现它,而不需要查看应用程序中的每一个丙烯酸材料,并添加代码来禁用它。

是否有一个最高级别的设置,我可以用来做这个?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-25 04:28:29

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

制备

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

Tool.cs

代码语言:javascript
复制
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的文档,您需要创建一个派生类。

代码语言:javascript
复制
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;
    }
}

使用

App.xaml.cs

代码语言:javascript
复制
public App()
{
    // ...
    CustomXamlResourceLoader.Current = new CustomResourceLoader();
}

MainPage

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

应该注意的是,在运行时切换不会影响已经呈现的元素。修改后,您可以弹出一个MessageDialog,请求用户重新启动应用程序以重新呈现。

谢谢。

票数 1
EN

Stack Overflow用户

发布于 2020-05-25 04:05:41

您可以将此代码放置到App.xaml或ShellPage的资源中。

你可以根据你的意愿来设置颜色。这将覆盖默认颜色。

代码语言:javascript
复制
<SolidColorBrush x:Key="NavigationViewDefaultPaneBackground" Color="Red" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61979141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档