7

概要

私の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の初期の結果は確かに間違っていたので、将来誰かに役立つ場合に備えて、これをSOの質問と自己回答として書いています。 )。

4

1 に答える 1

8

別の、しかし同様の msdn フォーラムの質問に対する別の MSFT 応答で回答が見つかりました。 TabControl controls are missing for UI Automation

ContentTemplated TabControl で UI オートメーションを機能させるには、次のようにName="PART_SelectedContentHost"属性をContentPresenter に追加します。

<ContentPresenter Name="PART_SelectedContentHost"
                  Content="{TemplateBinding SelectedContent}"/>

それだけです。UISpy は、現在選択されているタブのコンテンツを表示できるようになりました。

于 2010-09-03T17:50:55.323 に答える