gpt4 book ai didi

c# - UWP setting themeresource acrylic in code behind

转载 作者:太空宇宙 更新时间:2023-11-03 22:52:20 24 4
gpt4 key购买 nike

我有一个 UWP 应用程序,我想将它升级到流畅的设计系统。我使用 Windows Template Studio 创建了一个新项目,并且使用 Pivot 进行导航。

现在我想将acrylic background 放在pivot 的header 上。如 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 是我正在使用的枢轴,此加载方法是该枢轴的加载事件。

问题在于它仅适用于LightDark 主题(取决于上次运行应用时设置的主题),但是当应用正在运行并且我更改主题并在浅色或深色主题之间切换,这对两个主题都不起作用,例如,如果我将主题设为深色,则丙烯酸颜色保持为白色,而枢轴标题文本也为白色,因此会造成 UI 困惑。

此外 FallBack Color 也没有意义,因为浅色主题的后备颜色是黑色(与黑色文本混合),同样的问题出现在深色主题中。

我之所以从代码背后做这件事是因为我的应用程序的最小项目目标是没有丙烯酸刷的创作者更新。

最佳答案

Conditional XAML提供了一种在 XAML 标记中使用 ApiInformation.IsTypePresent 方法的方法。这使您可以根据 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)"

定义命名空间后,我们可以使用 GridBackground 属性的命名空间前缀,将其限定为应在运行时有条件地设置的属性。

<Grid Name="MainPivot" IsAcrylicBrushPresent:Background="{ThemeResource SystemControlAltHighAcrylicWindowBrush}"  IsAcrylicBrushNotPresent:Background="Red">

如果设备支持 AcrylicBrush,它将使用 SystemControlAltHighAcrylicWindowBrush。否则,它将使用红色。

关于c# - UWP setting themeresource acrylic in code behind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com