概要
私のWPFアプリケーションでは、左側にボタンがあるTabControlが必要だったので、必要なレイアウトでControlTemplateを定義しましたが、正常に機能しました。
ただし、私のテスターの自動テストツールは、現在選択されているタブを含め、タブのコンテンツを表示できません。
質問:ControlTemplateを定義しながら、自動テストツールでTabControlをテスト可能に保つにはどうすればよいですか?
詳細
私はWPF3.5を使用してWPFアプリケーションを開発しています私のテスターはQTP
と呼ばれる自動テストツールを使用しています
彼はUISpy.exeで見ることができるものなら何でもテストできると言います
- テンプレートを適用せずにストレートTabControlを使用すると、UISpyは現在選択されているタブのコンテンツを表示できます。
- ただし、ContentTemplateを使用してレイアウトを変更すると(以下に示すコード)、UISpyはタブヘッダーを表示できますが、コンテンツは表示されません。
サンプルWPFアプリケーション(Xaml):
<Window x:Class="TabControlTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Tab Control Test"
Height="300"
Width="300">
<Window.Resources>
<ControlTemplate x:Key="ButtonsOnLeftTabLayout"
TargetType="{x:Type TabControl}">
<DockPanel>
<StackPanel DockPanel.Dock="Left"
IsItemsHost="True" />
<ContentPresenter Content="{TemplateBinding SelectedContent}" />
</DockPanel>
</ControlTemplate>
</Window.Resources>
<TabControl Template="{StaticResource ButtonsOnLeftTabLayout}">
<TabItem Header="Tab 1">
<StackPanel>
<Button HorizontalAlignment="Center">Button 1</Button>
</StackPanel>
</TabItem>
<TabItem Header="Tab 2">
<StackPanel>
<Button HorizontalAlignment="Center">Button 2</Button>
</StackPanel>
</TabItem>
</TabControl>
</Window>
私の検索でこれまでに見つけたもの:
- カスタムAutomationPeerを使用してカスタムTabControlを作成する必要があることに関する多くのこと(たとえば、フォーラムの質問UI Automationに対するMSFTの回答:ControlTemplateでのコントロールへのアクセス、カスタムコントロールとUIオートメーションのブログ投稿)。しかし、私のすべての本能は、それはクレイジーなやり過ぎだと言っています。
- ContentPresenterに名前、x:Name、またはAutomationProperties.AutomationIdを与えることに関するいくつかの提案-どれも効果がありません
(検索後、最終的に答えが見つかりましたが、思ったよりも時間がかかりました。AutomationPeerの初期の結果は確かに間違っていたので、将来誰かに役立つ場合に備えて、これをSOの質問と自己回答として書いています。 )。