UWP Есть ли способ отключить Acrylic для всего приложения и всегда использовать резервный цвет?
В настоящее время я работаю над приложением UWP, которое выглядит примерно так с Acrylic на левой панели:
Теперь, когда я включаю режим энергосбережения на своем ноутбуке, акрил заменяется на резервный цвет:
Теперь мне нужна опция на экране настроек моего приложения, чтобы отключить акрил во всем приложении и всегда использовать резервный цвет. Однако я не уверен, с чего начать. Это кажется многообещающим, но я не уверен, как бы реализовать это без необходимости просматривать каждый акриловый материал в приложении и добавлять код для его отключения.
Есть ли параметр верхнего уровня, который я мог бы использовать для этого? Спасибо.
2 ответа
Вы можете использовать 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;
}
}
}
Ddefine
Согласно документации 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();
}
Главная страница
<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
просят пользователя перезапустить приложение для повторного рендеринга.
Спасибо.
Вы можете разместить этот код в App.xaml или в своих ресурсах ShellPage.
Вы можете установить цвет как хотите. Это заменит цвет по умолчанию.
<SolidColorBrush x:Key="NavigationViewDefaultPaneBackground" Color="Red" />