我有一个ListView
,其中包含从集合中绑定的对象。我用DataTemplate
设置的对象的表示。现在我想做以下事情。
我的TextBlock
中有两个DataTemplate
:
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"></TextBlock>
<TextBlock Text="{Binding Path}"></TextBlock>
</StackPanel>
</DataTemplate>
我已经指定了ItemContainerStyle
,用于实现悬停效果。
<Style TargetType="ListViewItem" x:Key="ContainerStyle">
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
... and so on
当用户将鼠标移到TextBlock
上时,我的目标是为包含名称的ListViewItem
加下划线。路径不应加下划线。怎么能实现呢?如何为每个DataTemplate
访问ListViewItem
中的元素?
问候, 马丁
答案 0 :(得分:1)
您可以通过为ListViewItem指定ControlTemplate或更改DataTemplate来执行此操作。以下示例显示了这两种方法。请注意,当您使用ControlTemplate时,您将丢失所选ListViewItem的蓝色背景(当您将其注释掉时返回) 编辑: 我没有很好地阅读你的要求。您只想为名称加下划线。然后唯一的可能是使用Datatemplate,或重写TextBox的ControlTemplate。
<Window x:Class="Underlining.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
>
<StackPanel>
<ListView ItemsSource="{Binding}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border Name="UnderlineInControlTemplate" BorderThickness="2,0,2,0"
BorderBrush="Transparent">
<ContentPresenter HorizontalAlignment="Left"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="UnderlineInControlTemplate"
Property="BorderBrush"
Value="BlueViolet"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Border Name="UnderlineInDataTemplate" BorderThickness="0,0,0,2"
BorderBrush="Transparent">
<TextBlock Text="{Binding Name}"/>
</Border>
<TextBlock Text="{Binding Path}"/>
</StackPanel>
<DataTemplate.Triggers>
<Trigger Property="TextBlock.IsMouseOver" Value="True">
<Setter TargetName="UnderlineInDataTemplate"
Property="BorderBrush"
Value="Red"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</Window>