[英]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.