0

グラフィカル アプリケーションをテストするためのツールを作成しようとしています。基本的には、次のようにします。

  1. キャンバスを作成する
  2. シェイプを作成し、作成したキャンバスに配置します。

そのため、自動テストを書いているので、キャンバスにシェイプを配置する前にキャンバスが作成されるのを待つ必要があります。Loaded イベントを使用しましたが、シェイプは作成されませんでした。

私の質問は、要素を Canvas に配置し始めるのに適切なタイミングはいつですか? Loaded 以外の特定のイベントはありますか?

編集

実際、これは Canvas ではなく、ListView の DataTemplate として機能する Grid です。Grid には多くの子が含まれています。最終的にすべての子が読み込まれたと言う適切な瞬間を得るのが難しいと思います。

おそらく、親 Grid のビジュアル ツリーで変更を検出し続けますが、一定時間変更が検出されなかった場合、すべての子が読み込まれて表示されたと思いますか? このように歩くことにした場合、ビジュアル ツリー内のどのイベントが新しい変更ごとにトリガーされますか?

<Grid x:Class="Graphics.Stage.KPage" Name="Scaller"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:aero="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
    xmlns:model="clr-namespace:Graphics.Models;assembly=Graphics.Models"
    xmlns:p="clr-namespace:Graphics.Stage"
      Cursor="None"
    xmlns:Header_Footer="clr-namespace:Graphics.Stage.Header_Footer" AllowDrop="True"  Width="{Binding Path=Width}"  Height="{Binding Path=Height}"  >
    <Grid.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Graphics.Stage;component/Resources/StageResources.xaml"/>
                <ResourceDictionary Source="/Graphics.UserControls;component/SharedDictionaryGreen.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Grid.Resources>
    <Grid.LayoutTransform>
        <ScaleTransform   ScaleX="{Binding ElementName=PagesList, Path=ScaleX}"
                                         ScaleY="{Binding ElementName=PagesList, Path=ScaleY}"
                        ></ScaleTransform>
    </Grid.LayoutTransform>

    <aero:SystemDropShadowChrome Name="ShadowChrome" Opacity="0.75" Margin="0,0,-5,-5"  />  
    <Border  BorderBrush="{StaticResource dark}"  BorderThickness="1.5" Name="PageBorder"   >

            <Grid  Name="Sizer"   >


            <Canvas Name="Layout"  Background="{StaticResource light}" ClipToBounds="True" Cursor="None"/>

            <Canvas Name="ImportedImageLayer"  Background="Transparent" ClipToBounds="True" Cursor="None"/>

            <p:InkSurface  x:Name="LayerInkSurface"  Cursor="None"  />

            <p:TempSurface  x:Name="TempSurface0" Cursor="None"  />
            <p:TempSurface  x:Name="TempSurface1" Cursor="None"  />



            <p:Surface  x:Name="LayerOnTopTools"  Cursor="None"  >

            </p:Surface>


            <p:Surface  x:Name="DraggingSurface0"  Cursor="None" />
            <p:Surface  x:Name="DraggingSurface1"  Cursor="None" />

            <Header_Footer:HeaderFooterView x:Name="MyHeaderView" VerticalAlignment="Top" PictureVerticalAlignment="Top"  MyVerticalAlignment="Top" />
            <Header_Footer:HeaderFooterView x:Name="MyFooterView" VerticalAlignment="Bottom" PictureVerticalAlignment="Bottom" MyVerticalAlignment="Bottom" />

            <Canvas  Name="GridsCanvas"  ClipToBounds="True"  IsHitTestVisible="False">

            </Canvas>

            <p:TopViewLayer  x:Name="PageTopView"  ClipToBounds="True" />


        </Grid>

    </Border>

</Grid>
4

1 に答える 1

0

Canvasイベント後に準備ができていない場合は、Loadedおそらくイベントを試すことができますContentRendered

 ContentRendered += new EventHandler(MainWindow_ContentRendered);

 private void MainWindow_ContentRendered(object sender, EventArgs e)
 {
     // do the dew
 }
于 2012-12-27T04:16:16.473 に答える