正如@icebat的评论中已经建议的那样,DataGrid
更适合于这种情况,这里为了澄清一个简单的演示实现:
<DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="False">
<DataGrid.Resources>
<Style TargetType="TextBlock" x:Key="TbStyle">
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="FontFamily" Value="Segue UI Light" />
<Setter Property="FontSize" Value="13" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Templates" SortMemberPath="Name"
Width="200" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<TextBlock Style="{StaticResource TbStyle}" ToolTip="{Binding Name}" Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
,
即使有更合适的解决方案,例如使用DataGrid
而不是ListView
,我也想展示一个答案,使您可以完全按照自己的意愿做 ListView
上有DisplayMemberBinding
,ToolTip
和TextBlocks
。
最后,我有以下XAML:
<ListView ItemsSource="{Binding MyList}">
<ListView.Resources>
<local:GridRowPresenterToDataContextPropertiesConverter x:Key="GridRowPresenterToDataContextPropertiesConverter"></local:GridRowPresenterToDataContextPropertiesConverter>
<Style TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="FontFamily" Value="Segue UI Light" />
<Setter Property="FontSize" Value="13" />
<!--THIS IS THE NEW PART-->
<Setter Property="ToolTip">
<Setter.Value>
<MultiBinding Converter="{StaticResource GridRowPresenterToDataContextPropertiesConverter}"
ConverterParameter="Name,Value">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType=GridViewRowPresenter}"/>
<Binding RelativeSource="{RelativeSource Mode=Self}"/>
</MultiBinding>
</Setter.Value>
</Setter>
<!--END OF THE NEW PART-->
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Templates" Width="200" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Templates" Width="200" DisplayMemberBinding="{Binding Value}"/>
</GridView>
</ListView.View>
</ListView>
我添加了一个简单的视图模型类和另一个GridViewColumn
进行测试:
public class MyViewModel {
public string Name { get; set; } = "Hello.";
public string Value { get; set; } = "world.";
}
此XAML会将第一列中所有Name
的{{1}}的{{1}}属性设置为DataContext
,并将{第二列中所有ToolTip
的{1}}与TextBlocks
相同。您可以通过将属性添加到Value
的有序列表中来处理其他列。
关键在于DataContext
的定义(这是我可能写过的最简单,最易懂的ToolTip
之一)
TextBlocks
此转换器获取目标元素(这里是每个ConverterParameter="Name,Value"
),找出GridRowPresenterToDataContextPropertiesConverter
的哪一列是生命,并从{{1 }}。
尽管这个答案的编写比起在生产代码中的使用更有趣,但它需要一些更聪明的代码来处理列的重新排序,而现在绝对不支持。
本文链接:https://www.f2er.com/3117519.html