问题描述
我希望我的ListViewItem
看起来像这样。如您所见,当ListViewItem
被选中/已经聚焦时,Border
应该改变颜色。
主要问题是我无法在Border
中的ContenPresenter
周围放置ControlTemplate
,因为与带有“描述”-{{ 1}}将位于TextBox
内部。但是我只希望Binding
和Border
在TextBox
内,它可以更改颜色,而不要更改描述(“ Nachname”,“ Vorname”)。
这是我到目前为止使用的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>
,
您可以将Style
和DataTrigger
绑定到父IsSelected
的{{1}}属性,并添加到{{1} }:
ListViewItem
请注意,您需要使用Border
的{{1}}设置器来设置属性(DataTemplate
)的默认值,以便在{{1} }。