XAML 如果设置了ItemContainerStyle,则UWP ListView选定项突出显示消失

bwleehnv  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(165)

我使用ListView来显示项目列表。但是当我使用ItemContainerStyle设置项目的字体时,现在选择了一个项目,ListView突出显示(左边的蓝线)不再可见。这里是关于这个screenshot的比较。问题是在安装Microsoft.UI.Xaml package时出现的,因为这里ListView的设计已经改变了。有没有办法在不删除ItemContainerStyleMicrosoft.UI.Xaml包的情况下修复这个问题?
MainPage.xaml

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
      
      <ListView HorizontalAlignment="Left">
        <ListViewItem Content="ABCD"/>
        <ListViewItem Content="abcd"/>
        <ListViewItem Content="1234"/>
      </ListView>

      <ListView HorizontalAlignment="Right">
        <ListViewItem Content="ABCD"/>
        <ListViewItem Content="abcd"/>
        <ListViewItem Content="1234"/>
        <ListView.ItemContainerStyle>
          <Style TargetType="ListViewItem">
            <Setter Property="FontSize" Value="16"></Setter>
          </Style>
        </ListView.ItemContainerStyle>
      </ListView>
      
    </Grid>
</Page>

App.xaml

<Application
    x:Class="App1.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1">
    <Application.Resources>
      <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
    </Application.Resources>
</Application>
8ljdwjyq

8ljdwjyq1#

出现此行为的原因是,当您为列表视图设置新的ItemContainerStyle时,它将覆盖WinUI库中使用的默认项目样式。
解决这个问题的方法是,你需要根据项目当前使用的样式为项目指定一个样式。我在WinUI GitHub中找到了ListViewItem的默认样式:ListViewItem_themeresources。因此,您只需要创建一个基于DefaultListViewItemStyle的样式。
您需要对代码进行一些修改,如下所示:

<ListView>
        <ListViewItem Content="ABCD"/>
        <ListViewItem Content="abcd"/>
        <ListViewItem Content="1234" />
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem" BasedOn="{StaticResource DefaultListViewItemStyle}">
                <Setter Property="FontSize" Value="25"></Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

相关问题