J'ai une application WPF qui suit principalement MVVM, que j'essaie d'automatiser.ViewModel casse l'automatisation de l'interface utilisateur dans WPF
Dans certains de mes contrôles utilisateur, je lie la propriété Content au ViewModel d'un autre contrôle utilisateur. Un modèle de données est défini qui mappe le ViewModel sur la vue correcte à afficher à l'écran.
Cela fonctionne correctement lorsque l'application est exécutée par un utilisateur, mais si j'essaie d'afficher l'arborescence d'automatisation dans UISpy ou un autre outil, il s'arrête toujours à ViewModel.
J'ai trouvé ce problème à plusieurs endroits. Existe-t-il un moyen de dire au ViewModel d'exposer les propriétés d'automatisation sous-jacentes dans l'arborescence? ou est-ce que je définis le mauvais modèle de données?
Merci à l'avance, Donal
EDIT: Voici un exemple XAML tiré de l'application. Il bloque l'accès à l'arbre d'automatisation. Il est placé dans un 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>
Voici une version précédente du XAML ci-dessus. Il permettait l'accès à l'arbre d'automatisation:
<TabControl
Grid.Column="2"
Padding="0"
cal:RegionManager.RegionName="{x:Static Regions:RegionNames.MainRegion}"
Name="tabControlMain"
TabStripPlacement="Bottom"
SelectedValuePath="Name"
ItemContainerStyle="{StaticResource TabItemStyle}">
</TabControl>
Lorsque le TabItemStyle est:
<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Il est toujours utile de coller du code XAML ou du code lorsque vous demandez si quelque chose de spécifique est incorrect (dans ce cas, votre DataTemplate). –