如何在WPF中为ListViewItem设置边框

4

我的 ListView 应该具有以下样式:

  • ListView 周围没有边框(已实现)
  • 与 ListViewItem 交互时不会高亮显示(已实现)
  • 选定的 ListViewItem 周围有边框(缺失)

我的 ListView:

<ListView DisplayMemberPath="Name" BorderThickness="0" >
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <!-- get rid of the highlighting -->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <ContentPresenter />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <!-- style selected item -->
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontSize" Value="20" />
                        <Setter Property="FontWeight" Value="Bold" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

我尝试了这个这个,但都没有对我起作用。我猜我的问题在于模板,但我不知道如何在选定的ListViewItem周围放置边框。

更新

解决方案:

    <ListView DisplayMemberPath="Name" BorderThickness="0" >
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <!-- get rid of the highlighting -->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Border x:Name="Border">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="FontSize" Value="20" />
                                    <Setter Property="FontWeight" Value="Bold" />
                                    <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                                    <Setter TargetName="Border" Property="BorderThickness" Value="2"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
1个回答

3
也许这个方法可行。在ContentPresenter周围添加边框并使用控件模板触发器。
 <ControlTemplate TargetType="{x:Type ListViewItem}">
                                <Border x:Name="Border">
                                    <ContentPresenter />
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter Property="FontSize" Value="20" />
                                        <Setter Property="FontWeight" Value="Bold" />
                                        <Setter TargetName="Border" Property="BorderBrush" Value="Red"/>
                                        <Setter TargetName="Border" Property="BorderThickness" Value="1"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接