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