ViewModel ломает автоматизацию пользовательского интерфейса в WPF - PullRequest
1 голос
/ 05 октября 2010

У меня есть приложение WPF, которое в основном следует MVVM, которое я пытаюсь автоматизировать.

В некоторых моих пользовательских элементах управления я связываю свойство Content с ViewModel другого пользовательского элемента управления.Определен шаблон данных, который отображает ViewModel в правильное представление для отображения на экране.

Это прекрасно работает, когда приложение запускается пользователем, но если я пытаюсь просмотреть дерево автоматизации в UISpy или другом инструменте, оно всегда останавливается на ViewModel.эта проблема в многочисленных местах.Есть ли способ сказать ViewModel выставить какие-либо свойства автоматизации под ним в дереве?или я неправильно определяю шаблон данных?

Заранее спасибо, Донал

РЕДАКТИРОВАТЬ: Вот пример XAML, взятый из приложения.Это блокирует доступ к дереву автоматизации.Он находится внутри окна RibbonWindow.

<TabControl Grid.Column="2" 
   cal:RegionManager.RegionName="{x:Static Regions:RegionNames.MainRegion}"  
   Name="tabControlMain" 
   SelectedValuePath="Name">
       <TabControl.Template>
          <ControlTemplate TargetType="TabControl">
              <Grid>
                <TabPanel IsItemsHost="True" Visibility="Hidden" />
                <Border BorderBrush="{DynamicResource BorderBrush}" Background="White" BorderThickness="1">
                    <framework:CachingContentPresenter 
                        ItemsSource="{Binding Items, ElementName=tabControlMain}" 
                        ContentTemplateSelector="{framework:MvvmTemplateSelector}"
                        ContentSource="SelectedContent" />
                </Border>
              </Grid>
          </ControlTemplate>
     </TabControl.Template>

Ниже приведена предыдущая версия вышеуказанного XAML.Он разрешал доступ к дереву автоматизации:

<TabControl 
     Grid.Column="2" 
     Padding="0" 
     cal:RegionManager.RegionName="{x:Static Regions:RegionNames.MainRegion}"  
     Name="tabControlMain" 
     TabStripPlacement="Bottom" 
     SelectedValuePath="Name" 
     ItemContainerStyle="{StaticResource TabItemStyle}">
</TabControl>

Где TabItemStyle:

<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyle">
   <Setter Property="Template">
      <Setter.Value>
          <ControlTemplate TargetType="TabItem">
          </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

1 Ответ

1 голос
/ 07 октября 2010

Мне удалось найти решение XAML, опубликованное выше. Я не уверен, будет ли это работать во всех случаях в нашем приложении, но я еще не попробовал их правильно.

В любом случае, исправление было найдено в этом посте: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fa8eb86f-5001-4af6-adb3-ceb0799a0cf3/

По сути, мы добавили 'Name = "PART_SelectedContentHost" к CachingContentPresenter в ControlTemplate. Насколько я понимаю, эта PART_ указывает синтаксическому анализатору / компилятору включить поведение шаблона элемента управления по умолчанию, такое как события мыши и нажатия клавиш, а также свойства автоматизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...