繁体   English   中英

白色UI自动化:获取WPF DataGrid单元格值?

[英]White UI Automation : Get WPF DataGrid cell value?

我是白色项目的新手,我只是检查它的功能...在我的工作中,我密集地处理wpf和datagrids,当列是DataGridTemplateColumn时,我无法获得datagrid单元格的值。

它不仅适用于DataGridTemplateColumn,而是适用于所有列类型。

我的数据网格如下:

    <my:DataGrid AutoGenerateColumns="False" Margin="25,28,42,34" Name="dataGrid1" >
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn Header="Header"  x:Name="koko" Width="200">
                <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate >
                        <TextBlock Name="moko" Text="{Binding col1, Mode=OneWay,Converter={StaticResource fataGridHighlightConverter }}" ></TextBlock>

                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
                <my:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <Grid x:Name="myEditGrid" Loaded="myEditGrid_Loaded">
                        </Grid>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellEditingTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>

我的测试是:

           [Test]
    public void TestDatagrid5()
    {
        var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId("dataGrid1"));
        var count = tab.Rows.Count;
        var row = tab.Rows[1];
        ListViewCell x = row.Cells[1]; //Always count = 0 :(
    }

但是细胞计数总是= 0,我需要得到细胞值!!! 请帮忙!

我不喜欢这个答案,并希望找到一个更好的方法来做到这一点..

这就是说,如果你在ListViewRow项目中询问网格中的元素,那么你可以使用UiAutomationElement并自己创建该元素的白色版本。

[Test]
public void TestDatagrid5()
{
  var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId"dataGrid1"));

  var column = new List<string>();

  foreach (var r in tab.Rows)
  {
    var automationElement = r.GetElement(SearchCriteria.ByAutomationId("moko"));

    var label = new Label(automationElement, new NullActionListener());

    column.Add(label.Text);
  }

  Assert.That(column, Is.EquivalentTo(new[] { "what", "is", "expected" }));

}

foreach(tab.Rows中的var r){var automationElement = r.GetElement(SearchCriteria.ByAutomationId(“moko”));

var label = new Label(automationElement,new NullActionListener());

column.Add(label.Text); }

作为警告,此方法可能无法使所有行都可见

我建议另辟蹊径。 如果网格支持导出为CSV - 请改为使用它。 这将节省你几个月的工作! 如果我之前才知道......

识别细胞和提取值可能很痛苦。 许多网格控件执行UI虚拟化。 将不会创建不适合视口的单元格。 您必须滚动网格以强制渲染。

我个人使用DevExpress网格。 它们的CSV导出会保留格式,因此您将获得与屏幕上显示的值完全相同的值!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM