0

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

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

省电图片

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

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

4

2 回答 2

1

您可以使用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提示用户重启应用重新渲染。

谢谢。

于 2020-05-25T04:28:29.623 回答
0

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

您可以根据需要设置颜色。这将覆盖默认颜色。

<SolidColorBrush x:Key="NavigationViewDefaultPaneBackground" Color="Red" />
于 2020-05-25T04:05:41.047 回答