ResourceDictionary.ThemeDictionaries (UWP) 中的 BitmapIconSource

BitmapIconSource in a ResourceDictionary.ThemeDictionaries (UWP)

我想根据当前 Windows 主题更改 NavigationViewItem 的 BitmapIcon。

我已经在 MainPage 添加了一个 ResourceDictionary.ThemeDictionaries 这样的:

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>

            <ResourceDictionary x:Key="Light">
                <BitmapIconSource x:Key="ProductionBitmap"
                                UriSource="/Assets/Images/ProduccioBlau.png" />
            </ResourceDictionary>

            <ResourceDictionary x:Key="Dark">
                <BitmapIconSource x:Key="ProductionBitmap"
                                UriSource="/Assets/Images/Produccio.png" />
            </ResourceDictionary>


            <ResourceDictionary x:Key="HighContrast">
                <BitmapIconSource x:Key="ProductionBitmap"
                                UriSource="/Assets/Images/Produccio.png" />
            </ResourceDictionary>

        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Page.Resources>

然后在 NavigationViewItem 中:

<NavigationViewItem Content="Ordres fabricació"
                    Tag="OrdresFabricacio">
    <NavigationViewItem.Icon>
        <BitmapIcon UriSource="{ThemeResource ProductionBitmap}"
                    ShowAsMonochrome="False" />
    </NavigationViewItem.Icon>
</NavigationViewItem>

但我在 UriSource="{ThemeResource ProductionBitmap}" 上看到一条波浪线:

The resource ProductionBitmap has an incompatible type.

在这种情况下使用主题资源的正确方法是什么?

应用程序编译没有错误,但我在 运行 评估主题资源时遇到异常。

问题是您不能以这种方式设置 BitmapIconUriSource 属性 的值。您可以直接将图像路径的字符串值存储在ResourceDictionary中。然后使用 ThemeResource 获取字符串值。

像这样:

      <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Light">
                <x:String x:Key="ProductionBitmap" >/Assets/london.png</x:String>
                <!--<BitmapIconSource x:Key="ProductionBitmap" UriSource="/Assets/london.png" />-->
            </ResourceDictionary>

            <ResourceDictionary x:Key="Dark">
                <x:String x:Key="ProductionBitmap" >/Assets/paris.png</x:String>
                <!--<BitmapIconSource x:Key="ProductionBitmap"  UriSource="/Assets/paris.png" />-->
            </ResourceDictionary>


            <ResourceDictionary x:Key="HighContrast">
                <x:String x:Key="ProductionBitmap" >/Assets/paris.png</x:String>
                <!--<BitmapIconSource x:Key="ProductionBitmap" UriSource="/Assets/paris.png" />-->
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Page.Resources>

这样使用:

  <BitmapIcon UriSource="{ThemeResource ProductionBitmap}"  ShowAsMonochrome="False" />