Wpf 如何仅在ListView的第二列上设置属性?
导言 我有一个ListView,只想格式化第二列。以下XAML代码实现了这一点:Wpf 如何仅在ListView的第二列上设置属性?,wpf,xaml,binding,coded-ui-tests,Wpf,Xaml,Binding,Coded Ui Tests,导言 我有一个ListView,只想格式化第二列。以下XAML代码实现了这一点: <ListView x:Name="listview"> <ListView.View> <GridView> <GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=Key}" Width="100"/> <
<ListView x:Name="listview">
<ListView.View>
<GridView>
<GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=Key}" Width="100"/>
<!-- <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}" Width="250">-->
<GridViewColumn Header="Value" Width="250">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Value}" Foreground="CornflowerBlue" AutomationProperties.Name="{Binding Path=Key}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我遇到的一个问题是没有设置AutomationProperties.Name属性。我正在用编码的UI测试生成器检查它,属性为空。文本和前景属性设置正确
问题
有人知道为什么没有设置AutomationProperties.Name吗
其他信息
很奇怪,下面的XAML代码确实设置了AutomationProperties.Name
<ListView x:Name="listview">
<ListView.Resources>
<Style TargetType="TextBlock">
<Setter Property="AutomationProperties.Name" Value="{Binding Key}"/>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=Key}" Width="100"/>
<GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}" Width="250"/>
</GridView>
</ListView.View>
</ListView>
但这里的问题是所有列都设置了AutomationProperties.Name。但我只希望它出现在第二列上,因为否则,我编码的UI测试代码返回的值(第一列的值,而不是我想要的第二列的值)是错误的。不知道您是否意识到这一点,但分析这些类型问题的一个非常有用的工具是 特别是,它将突出显示(红色)您可能存在的任何数据绑定错误 我自己看了一眼,看起来好像xaml的第一部分(上面)正在工作(在您清除语法错误之后)。在Snoop中,绑定属性以浅绿色亮显 以下是Snoop的屏幕截图,显示属性设置正确: 下面是Snoop的屏幕截图,在第一列显示TextBlock(未设置属性…无浅绿色列): 最后,我故意破坏了绑定,以便向您展示当出现错误并且出现数据绑定错误时,Snoop会显示什么(它以红色突出显示,其中一列会为您提供更多信息):
在您的第一段XAML中,语法不正确:
AutomationProperties.Name={Binding Path=“Key”}
应该是AutomationProperties.Name=“{Binding Path=Key}”
@Thomas Levesque:谢谢,我更正了它。我重新运行这个问题。您指出的XAML错误不是它的根源。您在输出窗口中看到任何绑定错误吗?我只是用Snoop查看了一下。AutomationProperties.Name仅为第二列设置。你可能没有看文本块吗?(我正在使用上面的第一个xaml。)@cplotts:你说得对,我没有看TextBlock。编码的UI测试生成器一直在选择Uia.ContentPresenter——很抱歉我忽略了这一点。+1,如果可以的话,我会投更多的票。非常感谢您花时间试用,并发布了精彩的截图!您是对的,Snoop确实显示属性已设置,但编码的UI测试生成器未设置。顺便说一下,非常感谢Snoop 64位。@Thomas Levesque,@Lernkurve:你们太好了!谢谢