如何让 ListViewItem 工具提示优先于 TextBlock 工具提示?
How to give the ListViewItem ToolTip precedence over the TextBlock ToolTip?
给定一个对象,例如:
public class Item
{
public string Foo { get; set; }
public string Bar { get; set; }
public int Hidden { get; set; }
}
简单显示为:
<Grid>
<Grid.Resources>
<!-- style stuff -->
</Grid.Resources>
<ListView
x:Name="ItemsListView"
ItemsSource="{Binding AllItems}"
SelectedValue="{Binding SelectedItem}">
<ListView.View>
<GridView>
<GridViewColumn
Width="75"
DisplayMemberBinding="{Binding Foo, Mode=OneWay}"
Header="Foo"/>
<GridViewColumn
Width="75"
DisplayMemberBinding="{Binding Bar, Mode=OneWay}"
Header="Bar"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
在 Grid.Resources
中,我创建了以下样式以允许 ToolTip
在悬停时显示每个 单元格 值:
<Style TargetType="{x:Type TextBlock}">
<Setter
Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/>
<Setter
Property="TextTrimming"
Value="CharacterEllipsis"/>
</Style>
如愿以偿。但现在我想根据 Hidden
属性 验证一行。如果值为 -1
,则用红色勾勒该行并显示 TooTip
消息:
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger
Binding="{Binding Hidden}"
Value="-1">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="ToolTip" Value="Bad Item... Bad!"/>
</DataTrigger>
</Style.Triggers>
</Style>
这也有效,只要我将鼠标悬停在无效项目的单元格边框上。当我将鼠标悬停在无效项目的 Foo
或 Bar
单元格上时,会显示之前显示单元格值的 ToolTip
。
当行无效时,如何让 ListViewItem.ToolTip
覆盖 TextBlock.ToolTip
?
您可以按如下方式设置TextBlock样式,以便在指定条件下在DataTrigger中设置ToolTip。在这种情况下,如果未在 GridViewColumn 上设置工具提示,则 ListViewItem 工具提示将自动出现。
<Style TargetType="{x:Type TextBlock}">
<Setter
Property="TextTrimming"
Value="CharacterEllipsis"/>
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Style.Triggers>
<DataTrigger
Binding="{Binding Hidden}"
Value="0">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/>
</DataTrigger>
</Style.Triggers>
</Style>
给定一个对象,例如:
public class Item
{
public string Foo { get; set; }
public string Bar { get; set; }
public int Hidden { get; set; }
}
简单显示为:
<Grid>
<Grid.Resources>
<!-- style stuff -->
</Grid.Resources>
<ListView
x:Name="ItemsListView"
ItemsSource="{Binding AllItems}"
SelectedValue="{Binding SelectedItem}">
<ListView.View>
<GridView>
<GridViewColumn
Width="75"
DisplayMemberBinding="{Binding Foo, Mode=OneWay}"
Header="Foo"/>
<GridViewColumn
Width="75"
DisplayMemberBinding="{Binding Bar, Mode=OneWay}"
Header="Bar"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
在 Grid.Resources
中,我创建了以下样式以允许 ToolTip
在悬停时显示每个 单元格 值:
<Style TargetType="{x:Type TextBlock}">
<Setter
Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/>
<Setter
Property="TextTrimming"
Value="CharacterEllipsis"/>
</Style>
如愿以偿。但现在我想根据 Hidden
属性 验证一行。如果值为 -1
,则用红色勾勒该行并显示 TooTip
消息:
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger
Binding="{Binding Hidden}"
Value="-1">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="ToolTip" Value="Bad Item... Bad!"/>
</DataTrigger>
</Style.Triggers>
</Style>
这也有效,只要我将鼠标悬停在无效项目的单元格边框上。当我将鼠标悬停在无效项目的 Foo
或 Bar
单元格上时,会显示之前显示单元格值的 ToolTip
。
当行无效时,如何让 ListViewItem.ToolTip
覆盖 TextBlock.ToolTip
?
您可以按如下方式设置TextBlock样式,以便在指定条件下在DataTrigger中设置ToolTip。在这种情况下,如果未在 GridViewColumn 上设置工具提示,则 ListViewItem 工具提示将自动出现。
<Style TargetType="{x:Type TextBlock}">
<Setter
Property="TextTrimming"
Value="CharacterEllipsis"/>
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Style.Triggers>
<DataTrigger
Binding="{Binding Hidden}"
Value="0">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/>
</DataTrigger>
</Style.Triggers>
</Style>