繁体   English   中英

ViewModel打破了WPF中的UI自动化

[英]ViewModel breaks UI automation in WPF

我有一个主要遵循MVVM的WPF应用程序,我正在尝试使其自动化。

在某些用户控件中,我将Content属性绑定到另一个用户控件的ViewModel。 定义了一个数据模板,该模板将ViewModel映射到要在屏幕上显示的正确View。

当用户运行该应用程序时,此方法效果很好,但是如果我尝试在UISpy或其他工具中查看自动化树,则它总是在ViewModel处停止。

我在很多地方都发现了这个问题。 有没有办法告诉ViewModel在树中公开它下面的任何自动化属性? 还是我定义数据模板错误?

在此先感谢Donal

编辑:这是从应用程序中提取的示例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>

我设法找到了上面发布的XAML的解决方案。 我不确定在我们的应用程序中它是否在所有情况下都能正常工作,但我尚未对其进行尝试。

无论如何,此帖子中找到了修复程序: http : //social.msdn.microsoft.com/Forums/en-US/wpf/thread/fa8eb86f-5001-4af6-adb3-ceb0799a0cf3/

基本上,我们在ControlTemplate中的CachingContentPresenter中添加了“ Name =“ PART_SelectedContentHost””。 据我了解,该PART_告诉解析器/编译器包括控件模板的默认行为,例如鼠标事件和键盘按下以及Automation属性。

暂无
暂无

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

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