如何设计此ListViewItem

问题描述

我希望我的ListViewItem看起来像这样。如您所见,当ListViewItem被选中/已经聚焦时,Border该改变颜色。

主要问题是我无法在Border中的ContenPresenter周围放置ControlTemplate,因为与带有“描述”-{{ 1}}将位于TextBox内部。但是我只希望BindingBorderTextBox内,它可以更改颜色,而不要更改描述(“ Nachname”,“ Vorname”)。

enter image description here

这是我到目前为止使用的XAML。我不知道如何在ControlTemplate中更改边框:

Icon

解决方法

您可以将Trigger添加到名为Border的{​​{1}}中,如下所示:

PART_Border

请注意,为了测试我的代码,我用标准颜色替换了一些映射到您代码中某些颜色的<Border x:Name="PART_Border" Grid.Row="1" BorderThickness="1" > <Border.Style> <Style TargetType="Border"> <Setter Property="BorderBrush" Value="DarkGray" /> <Style.Triggers> <DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListViewItem}}}" Value="True" > <Setter Property="BorderBrush" Value="Black"/> </DataTrigger> </Style.Triggers> </Style> </Border.Style> <Grid Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="48" /> </Grid.ColumnDefinitions> <TextBox Grid.Column="0" Text="{Binding SearchText}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" FontSize="15" Padding="12,15" BorderThickness="0" /> <Border Grid.Column="1" Background="Gray" Margin="8"> <Rectangle Width="20" Height="20" /> </Border> </Grid> </Border>

出于相同的原因,我还用StaticResource替换了图标。

,

尝试使用您的IsSelected触发器:

<Trigger Property="IsSelected" Value="True">
        <Setter TargetName="PART_Border" Property="BorderBrush" Value="Fuchsia" />
        <Setter TargetName="PART_Border" Property="BorderThickness" Value="1" />
</Trigger>
,

您可以将StyleDataTrigger绑定到父IsSelected的{​​{1}}属性,并添加到{{1} }:

ListViewItem

请注意,您需要使用Border的{​​{1}}设置器来设置属性(DataTemplate)的默认值,以便在{{1} }。