根据xaml中的主题更改ImageButton源

use*_*446 3 maui .net-maui

我想根据主题(即浅色与深色)更改 xaml 中 ImageButton 的来源。我收到 System.NullReferenceException“未将对象引用设置为对象的实例。” 当我使用以下内容时:

<ImageButton
        Grid.Row="1"
        Margin="10"
        Command="{Binding CreateCommand}"
        Source="{AppThemeBinding Light=add_box_black_48dp.svg, Dark=add_box_light_48dp.svg}"
        HorizontalOptions="End"
        VerticalOptions="End"/>
Run Code Online (Sandbox Code Playgroud)

如果我将源更改为以下内容,一切正常

Source="add_box_white_48dp"
Run Code Online (Sandbox Code Playgroud)

我可以使用 AppThemeBinding 以这种方式更改 ImageButton 源吗

<于 2022 年 6 月 4 日编辑,以显示有效案例和无效案例的 xaml。还更改了 svg 文件的名称以反映浅色和深色情况>

我正在使用 Visual Studio Community 2022(64 位)- 预览版 17.3.0 预览版 1.1

此 ImageButton xaml 引发异常:

<ImageButton
    Margin="10"
    Command="{Binding CreateNewAccountCommand}"
    Source="{AppThemeBinding Light=add_light.svg, Dark=add_dark.svg}"
    HorizontalOptions="End"
    VerticalOptions="End"
    BackgroundColor="#376489"
    CornerRadius="8"
    WidthRequest="36"
    HeightRequest="36">
</ImageButton>
Run Code Online (Sandbox Code Playgroud)

此 ImageButton xaml 有效且不会引发异常

<ImageButton
    Margin="10"
    Command="{Binding CreateNewAccountCommand}"
    Source="add_light.svg"
    HorizontalOptions="End"
    VerticalOptions="End"
    BackgroundColor="#abdbe3"
    CornerRadius="8"
    WidthRequest="36"
    HeightRequest="36">
</ImageButton>
Run Code Online (Sandbox Code Playgroud)

这也有效并且不会抛出异常

<ImageButton
    Margin="10"
    Command="{Binding CreateNewAccountCommand}"
    Source="add_dark.svg"
    HorizontalOptions="End"
    VerticalOptions="End"
    BackgroundColor="#376489"
    CornerRadius="8"
    WidthRequest="36"
    HeightRequest="36">
</ImageButton>
Run Code Online (Sandbox Code Playgroud)

Too*_*eve 5

要跨平台工作,请参阅.png文件。这些是由毛伊岛自动构建的:

  1. 每个图像资源都需要Property/BuildAction:“MauiImage”。
  2. 参考xaml中的.png:
Source="{AppThemeBinding Light=add_box_black_48dp.png, Dark=add_box_light_48dp.png}"
Run Code Online (Sandbox Code Playgroud)

通过修改Maui项目的默认MainPage进行验证,说:

<Image Source="{AppThemeBinding Light=dotnet_bot.png, Dark=dotnet_bot.png}" ... />
Run Code Online (Sandbox Code Playgroud)

这是指一个 Media item dotnet_bot.svg,(我推断)它被“MauiImage”转换为.png资源。


注意:也许计划是能够取消延期。这在 Android 上有效,但图像在 Windows 上不显示:

<!-- Doesn't work currently on Windows -->
<Image Source="{AppThemeBinding Light=dotnet_bot, Dark=dotnet_bot}" ... />
Run Code Online (Sandbox Code Playgroud)