#1。
我已经查看了很多问题\答案,但仍未找到我在Visual UI Automation Verify(2.0)中遇到的问题的线索。
我在TreeList(DevExpress控件)中有一个ContextMenu:
<dxg:TreeListControl.ContextMenu>
<ContextMenu x:Name="TreeListContextMenu" DataContext="{Binding Path=Data, Source={StaticResource Proxy}}" ItemsSource="{Binding Path=Data.SelectedItemContextMenuItemCollection, Source={StaticResource Proxy}}"/>
</dxg:TreeListControl.ContextMenu>
我有一个简单的绑定代理,例如使用以下代码声明的this one:
<dataStructures:BindingProxy x:Key="Proxy" Data="{Binding}" />
用户控件的DataContext和ContextMenu的DataContext绑定到代理上的Data属性(因为ContextMenu不属于同一个可视树)。
在非共享的MenuItem样式中,我将代理的Data属性中的值赋给MenuItem的附加属性:
<Setter Property="helpers:ParentControlDataContextBindingHelper.ParentControlDataContext" Value="{Binding Path=Data, Source={StaticResource Proxy}}" />
这样做的原因是:
树中有各种物体。每个对象可能具有基于对象的特定属性值的不同ContextMenu项列表。我正在通过将它传递给命令来处理“ContextMenuOpening”事件:
<i:Interaction.Triggers>
<i:EventTrigger EventName="ContextMenuOpening">
<prism:InvokeCommandAction Command="{Binding ContextMenuOpeningCommand}"/>
</i:EventTrigger>
<i:Interaction.Triggers/>
在ContextMenuOpeningCommand命令中,我正在清除然后根据SelectedItem的属性填充SelectedItemContextMenuItemCollection(由MenuItem Visual Models组成 - 为MenuItem的Header,Command和Icon绑定源)
第一次调用上下文菜单时 - 它出现在Visual UI Automation Verify(带有正确的ContextMenuItem头)上,但在关闭后无法测试 - 它在Visual UI Automation Verify中的内容是DisconnnectedItems。如果我在不同类型的元素上调用下一个ContextMenu并且ContextMenu项目列表不同 - Visual UI Automation Verify甚至不显示菜单项的标题(标题为空,因为菜单关闭后菜单项的DataContext为DisconnectedItem) 。如果我正在使用“硬编码”的ContextMenu以及XAML中的所有绑定和项目 - 一切正常。
我不确定这种行为是否真的是设计的。是否可以使用Visual UI Automation验证使用非静态项集合测试ContextMenu? WindowsKits中的Inspect.exe行为相同。更重要的是 - 如何通过VisualUIAVerify测试菜单?