Визуальная проверка автоматизации пользовательского интерфейса показывает DisconnectedItem в ContextMenu (WPF) - PullRequest
0 голосов
/ 21 мая 2018

Stackoverflow.

Я просмотрел большое количество вопросов \ ответов и до сих пор не нашел ключ к проблеме, с которой я сталкиваюсь в Visual UI Automation Verify (2.0).

У меня есть ContextMenu в TreeList (элемент управления DevExpress):

<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>

У меня есть простой связующий прокси, такой как этот , объявленный со следующим кодом:

<dataStructures:BindingProxy x:Key="Proxy" Data="{Binding}" />

DataContext пользовательского элемента управления и DataContext в ContextMenu привязаны к свойству Data на прокси-сервере (поскольку ContextMenu не принадлежит одному и тому же визуальному дереву).

В необщем стиле MenuItem I 'm присваивая значение из свойства 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 я очищаю, а затем заполняю SelectedItemContextMenuItemCollection (который состоит из визуальных моделей MenuItem - источников привязки для заголовка,Команда и значок для MenuItem), основанные на свойстве SelectedItem

Когда контекстное меню вызывается первый раз - оно появляется в Visual UI Automation Verify (с правильными заголовками ContextMenuItem), но не можетпроверяться после его закрытия - его содержимое в Visual UI Automation Verify является DisconnnectedItems.Если я вызываю следующее ContextMenu для элемента другого типа, а список элементов ContextMenu отличается - проверка автоматизации пользовательского интерфейса не показывает даже заголовки элементов меню (заголовки пусты, поскольку DataContext элемента меню - DisconnectedItem после закрытия меню),Если я использую «жестко закодированное» ContextMenu со всеми привязками и элементами в XAML - все в порядке.

Я не уверен, является ли это поведение на самом деле разработанным или нет.Можно ли протестировать ContextMenu с коллекцией нестатических элементов с помощью Visual UI Automation Verify?Inspect.exe в WindowsKits ведет себя так же.Что важнее - как я могу обойти это, чтобы иметь возможность тестировать меню с VisualUIAVerify?

...