Wpf 在DataTemplate中标签中的文本下划线

Wpf 在DataTemplate中标签中的文本下划线,wpf,xaml,triggers,styles,datatemplate,Wpf,Xaml,Triggers,Styles,Datatemplate,我有一个列表视图,其中包含从集合绑定的对象。我用DataTemplate设置的对象的表示形式。现在我想做以下几点。 我的数据模板中有两个文本块: <DataTemplate> <StackPanel> <TextBlock Text="{Binding Name}"></TextBlock> <TextBlock Text="{Binding Path}"></TextBlock> &

我有一个
列表视图
,其中包含从集合绑定的对象。我用
DataTemplate
设置的对象的表示形式。现在我想做以下几点。 我的
数据模板中有两个
文本块

<DataTemplate>
   <StackPanel>
       <TextBlock Text="{Binding Name}"></TextBlock>
       <TextBlock Text="{Binding Path}"></TextBlock>
   </StackPanel>
</DataTemplate>
我的目标是,当用户将鼠标移到
列表视图项上时,在包含名称的
文本块
下划线。路径不应加下划线。如何实现这一点?如何为每个
ListViewItem
访问
DataTemplate
中的元素

您好,
Martin

您可以通过为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>

<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>