UWP установка темыресурс акрил в коде позади
У меня есть приложение uwp, и я хочу обновить его до свободной системы проектирования. Я создал новый проект с помощью Windows Template Studio, и моя навигация осуществляется с помощью Pivot. Теперь я хочу поместить акриловый фон в заголовок оси. как уже упоминалось в руководстве по проектированию UWP, рекомендуется использовать 70% акрила в этом сценарии.
Поэтому я попытался использовать 70-процентный акрил со следующим кодом.
private void MainPivot_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.AcrylicBrush"))
{
MainPivot.Background = Application.Current.Resources["SystemControlAltHighAcrylicWindowBrush"] as AcrylicBrush;
}
}
Где MainPivot - это пивот, который я использую, и этот загруженный метод загружает событие для этой пивот.
Проблема в том, что он работает только для Светлой или Темной Темы (зависит от того, какая тема была установлена во время последнего запуска приложения). но когда приложение работает, и я меняю тему и переключаюсь между светлыми или темными темами, это не очень хорошо работает для обеих тем, например, если я делаю тему темной, акриловый цвет остается белым, а текст заголовка сводки также белым, что создает нарушенный интерфейс.
Кроме того, цвет FallBack не имеет смысла, поскольку для светлой темы резервный цвет является черным (который сливается с черным текстом), и та же проблема возникает в темной теме.
Причина, по которой я делаю это из-за кода, потому что целью моего приложения является минимальное обновление создателей, у которого нет акриловой кисти.
заранее спасибо
1 ответ
Условный XAML предоставляет способ использования ApiInformation.IsTypePresent
метод в разметке XAML. Это позволяет вам устанавливать свойства и создавать экземпляры объектов в разметке, основываясь на наличии API, без необходимости использования кода позади.
Чтобы использовать условный метод в XAML, вы должны сначала объявить условное пространство имен XAML в верхней части вашей страницы.
xmlns:IsAcrylicBrushPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsTypePresent(Windows.UI.Xaml.Media.AcrylicBrush)"
xmlns:IsAcrylicBrushNotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsTypeNotPresent(Windows.UI.Xaml.Media.AcrylicBrush)"
После того, как пространство имен определено, мы можем использовать префикс пространства имен для Background
собственность вашего Grid
квалифицировать его как свойство, которое должно быть установлено условно во время выполнения.
<Grid Name="MainPivot" IsAcrylicBrushPresent:Background="{ThemeResource SystemControlAltHighAcrylicWindowBrush}" IsAcrylicBrushNotPresent:Background="Red">
Если устройство поддерживает AcrylicBrush
, он будет использовать SystemControlAltHighAcrylicWindowBrush. Если нет, он будет использовать красный цвет.