用BitmapIconSource创建的SwipeItem图标在ListView中会改变前景

SwipeItem icon created with BitmapIconSource changes foreground when in a ListView


问题

我在ListView.ItemTemplate中添加了一个SwipeControl,我需要使用一个自定义的图标,所以我使用了一个BitmapIconSource。

现在的情况是,当显示SwipeItems时,用BitmapIconSource创建的图标的前景被改为黑色。下面是一个显示这个问题的gif图片。

26620-swipecontrol.gif

我创建了一个有2个SwipeItems的SwipeControl,第一个SwipeItem使用BitmapIconSource,第二个使用SymbolIconSource。你可以看到只有用BitmapIconSource创建的图标将前景从白色变为黑色。

这里的XAML可以重现这个问题

<Page x:Class="SwipeItemCustomItemInListView.AppShell.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:system="using:System"
      mc:Ignorable="d"
      Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <ListView ItemsSource="{x:Bind _list}" SelectionMode="None" IsItemClickEnabled="True">
            <ListView.Resources>
                <BitmapIconSource x:Key="BitmapIcon" UriSource="/Assets/Phone.png"/>
                <SymbolIconSource x:Key="SymbolIcon" Symbol="AttachCamera" />
                <SwipeItems x:Key="SwipeItems" Mode="Reveal">
                    <SwipeItem Background="Red" BehaviorOnInvoked="Close"
                               Text="BitmapIcon"
                               IconSource="{StaticResource BitmapIcon}"
                               Foreground="White"/>
                    <SwipeItem Background="Red" BehaviorOnInvoked="Close"
                               Text="SymbolIcon"
                               IconSource="{StaticResource SymbolIcon}"
                               Foreground="White"/>
                </SwipeItems>
            </ListView.Resources>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="system:String">
                    <SwipeControl LeftItems="{StaticResource SwipeItems}" Padding="8,0">
                        <TextBlock Text="{x:Bind}" VerticalAlignment="Center"/>
                    </SwipeControl>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Page>

你好,我试了一下你的代码,没有重现这个问题。你所运行的系统的版本是19041(2004)吗?如果低于这个版本,可能意味着这个问题在新版本中已经被修复。为了消除图标造成的影响,你也可以尝试更换图标文件。

是的,我用19041(2004)进行了测试,我能够重现这个问题。

我不理解 "为了消除图标造成的影响,你也可以尝试更换图标文件 "的提示。它发生在任何与BitmapIconSource一起使用的图标文件上。

重现这个问题的另一个方法是:打开刷卡控制,在刷卡控制打开的情况下按下并保持按下列表项。

这里是带有代码的 repo https://github.com/DanieleScipioni/SwipeItemCustomItemInListView

答案1

你好,

欢迎来到微软问与答。

这似乎是默认行为。我的意思是,在浅色主题下,图标的颜色会变成黑色,而在深色主题下,它会变成白色。

如果你需要 BitmapIconSource 一直保持白色,你可以按照下面的步骤。

  1. 用一个白色的图标替换 Phone.png

  2. BitmapIconSource.ShowAsMonochrome 设置为

    <BitmapIconSource x:Key="BitmapIcon"
    UriSource="/Assets/Phone.png"
    ShowAsMonochrome="False" />


谢谢。