Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
C# UIAutomation有时会将WPF ListView对象识别为DataGrid而不是ListView_C#_Wpf_Listview_Datagrid_Microsoft Ui Automation - Fatal编程技术网

C# UIAutomation有时会将WPF ListView对象识别为DataGrid而不是ListView

C# UIAutomation有时会将WPF ListView对象识别为DataGrid而不是ListView,c#,wpf,listview,datagrid,microsoft-ui-automation,C#,Wpf,Listview,Datagrid,Microsoft Ui Automation,我们在应用程序中使用了一个ListView对象,它是一个新类SortableListView:ListView,并使用GridView模式。我们添加了一个自定义提供程序,它允许在自动化过程中取消行的虚拟化(因此我们不必执行“在屏幕上检查、否、滚动、重复”的方法来选择列表中的项目)。它工作得很好,当你意识到一个屏幕外的对象时,它会被有效地带到屏幕上。我们使用ListView是因为网格是只读的,所以我们不需要DataGrid的编辑模板 然而,有时(我们无法确切地追踪它的原因)ControlType被

我们在应用程序中使用了一个
ListView
对象,它是一个新类
SortableListView:ListView
,并使用
GridView
模式。我们添加了一个自定义提供程序,它允许在自动化过程中取消行的虚拟化(因此我们不必执行“在屏幕上检查、否、滚动、重复”的方法来选择列表中的项目)。它工作得很好,当你意识到一个屏幕外的对象时,它会被有效地带到屏幕上。我们使用ListView是因为网格是只读的,所以我们不需要DataGrid的编辑模板

然而,有时(我们无法确切地追踪它的原因)ControlType被识别为DataGrid而不是ListView。这破坏了我们的自动化,而我们唯一能找到它的方法是,每次我们必须处理网格时,我们必须检查它是以DataGrid还是ListView的形式呈现。更令人不安的是,表中的实际行具有Class
ListViewItem
,这正是Microsoft未修改的对象形式,但被识别为DataGrid行


有人知道为什么UIAutomation会决定它是一个
DataGrid
而不是一个ListView吗?它实际上是直接从ListView继承的。

,模式集在运行时可能会有所不同。所以问题应该是,为什么ListView选择将自己呈现为DataGrid?或者,为什么您的提供商选择以DataGrid的形式呈现?不,问题是我提出的。如果答案是“因为控件正告诉它这样做”,那么我需要知道如何阻止它告诉UIAutomation使用该模式。你自鸣得意的回答没有帮助任何人。事实上,这是一个答案。控件可以选择在不同的时间显示不同的模式。您可能需要在运行时根据提供的模式做出决定。