我目前正在开发一个 UWP 应用程序,它看起来像这样,左侧面板上有亚克力:
现在,当我在笔记本电脑上启用省电模式时,亚克力会被替换为它的后备颜色:
现在我想要在我的应用程序的设置屏幕中使用一个选项来禁用整个应用程序中的亚克力,并始终使用后备颜色。但是,我不确定从哪里开始。这看起来很有希望,但我不确定如何实现它,而不必检查应用程序中的每个丙烯酸材料并添加代码以禁用它。
是否有可以用来执行此操作的顶级设置?谢谢。
您可以使用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] 删除。
我来说两句