0

介绍

我有一个 ListView 并且只想格式化第二列。以下 XAML 代码执行此操作:

<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 属性。我正在使用 Coded UI Test Builder 检查它,并且该属性为空。Text 和 Foreground 属性设置正确。

问题

有谁知道为什么没有设置 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 测试代码会返回错误的值(第一列的值,而不是我想要的第二列的值)。

4

1 回答 1

2

不知道您是否意识到这一点,但分析这些类型问题的一个非常有用的工具是Snoop

特别是,它将突出显示(用红色)您可能遇到的任何数据绑定错误。

我自己看了看,似乎 xaml 的第一部分(上图)现在正在工作(在您清除语法错误之后)。在 Snoop 中,绑定的属性以浅绿色突出显示。

这是 Snoop 的屏幕截图,显示属性设置正确: 窥探屏幕截图 1

这是 Snoop 的屏幕截图,显示第一列上的 TextBlock(未设置属性...没有浅绿色列): 窥探屏幕截图 2

最后,我故意破坏了绑定,以便向您展示 Snoop 在出现问题并且您遇到数据绑定错误时显示的内容(它以红色突出显示,其中一列为您提供了其他信息): 窥探屏幕截图 3

于 2010-06-16T13:52:12.733 回答