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. Если нет, он будет использовать красный цвет.

Другие вопросы по тегам