我正在尝试编写一个用于测试图形应用程序的工具,基本上,这就是我所做的:
- 创建画布
- 创建形状并将它们放置在创建的画布上。
因此,当我正在编写自动化测试时,我需要等待 Canvas 被创建,然后才能开始在其上放置形状,我使用了 Loaded 事件,但没有创建任何形状。
我的问题是,什么时候开始在 Canvas 上放置元素?除了 Loaded 之外,还有特定的事件吗?
编辑
好吧,实际上它不是 Canvas,它是一个 Grid,它充当 ListView 的 DataTemplate,Grid 包含很多子项,我发现很难找到合适的时机说它最终加载了所有子项。
也许,我会继续检测父网格的可视化树中的任何变化,如果在某个特定时间内没有检测到任何变化,那么,我假设所有的孩子都加载并查看了?如果我决定这样走,Visual Tree 中的什么事件会因每次新更改而触发?
<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>