Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何仅在ListView的第二列上设置属性?_Wpf_Xaml_Binding_Coded Ui Tests - Fatal编程技术网

Wpf 如何仅在ListView的第二列上设置属性?

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,只想格式化第二列。以下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属性。我正在用编码的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:你们太好了!谢谢