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

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

现在我希望在我的应用程序的设置屏幕上有一个选项,在整个应用程序中禁用丙烯酸,并始终使用回退颜色。不过,我不知道从哪里开始。这似乎很有希望,但我不知道如何实现它,而不需要查看应用程序中的每一个丙烯酸材料,并添加代码来禁用它。
是否有一个最高级别的设置,我可以用来做这个?谢谢。
发布于 2020-05-25 04:28:29
您可以使用CustomResource来决定如何显示AcrylicBrush:
制备
在问题描述中,您需要一个顶级设置来切换丙烯酸效果。在这里您可以使用LocalSettings。
Tool.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;
}
}使用
App.xaml.cs
public App()
{
// ...
CustomXamlResourceLoader.Current = new CustomResourceLoader();
}MainPage
<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-25 04:05:41
您可以将此代码放置到App.xaml或ShellPage的资源中。
你可以根据你的意愿来设置颜色。这将覆盖默认颜色。
<SolidColorBrush x:Key="NavigationViewDefaultPaneBackground" Color="Red" />https://stackoverflow.com/questions/61979141
复制相似问题