uwp设置themeresource丙烯酸代码背后

时间:2017-10-23 17:40:08

标签: c# xaml uwp fluent-design acrylic-material

我有一个uwp应用程序,我想将其升级为流畅的设计系统。我使用 Windows Template Studio 创建了一个新项目,我的导航是 Pivot 。 现在我想将丙烯酸背景放在数据透视表的标题上。正如uwp的设计指南中所提到的,建议在这种情况下使用70%的丙烯酸树脂。

所以我尝试使用70%的丙烯酸和以下代码。

void free_maze(Maze *maze) {
    if (maze == NULL) {
        return;
    }

    free(maze);
    return;
}
  

MainPivot是我正在使用的枢轴,这个加载的方法是该枢轴的加载事件。

问题是它仅适用于 Light Dark 主题(取决于上次运行应用时设置的主题)。但是当应用程序运行并且我更改主题并在浅色或深色主题之间切换时,它对两个主题都不起作用,例如,如果我使主题变暗,则丙烯酸颜色保持白色,并且枢轴标题文本也是白色因此创建了令人不安的UI。

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

  

我之所以这样做是因为我的应用程序的最小项目目标是创建者更新,它没有丙烯酸刷。

提前致谢

1 个答案:

答案 0 :(得分:3)

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)"

在定义名称空间之后,我们可以使用名称空间前缀到Background的{​​{1}}属性来将其限定为应在运行时有条件地设置的属性。

Grid

如果设备支持<Grid Name="MainPivot" IsAcrylicBrushPresent:Background="{ThemeResource SystemControlAltHighAcrylicWindowBrush}" IsAcrylicBrushNotPresent:Background="Red"> ,它将使用SystemControlAltHighAcrylicWindowBrush。如果没有,它将使用红色。