2016-07-03 13 views
0

Ich schreibe einen Test. Ich analysieren XAML Elemente XamlReader.Parse MethodeSo laden Sie FrameworkElement

<StackPanel x:Name='Element1'> 
    <ContentControl x:Name='Element6'> 
     <Button x:Name='Element7'> 
      <Label x:Name='Element8' /> 
     </Button> 
    </ContentControl> 
    <Button x:Name='Element2' /> 
    <FrameworkElement x:Name='Element3' /> 
    <Button /> 
    <DockPanel x:Name='Element4' /> 
    <FrameworkElement x:Name='Element5' /> 
    <FrameworkElement /> 
</StackPanel> 

Next ich jedes visuelle Element erhalten mit iterieren wollen. Ich verwende VisualTreeHelper.GetChildrenCount und VisualTreeHelper.GetChild Methoden. VisualTreeHelper.GetChildrenCount für root StackPanel gibt 7 zurück und es ist richtig. Aber für ContentControl (Element 6) VisualTreeHelper.GetChildrenCount gibt 0 zurück.

Ich überprüft IsLoaded Eigenschaft und es hatte 'false' Wert. Dies bedeutet, dass ContentTemplate für ContentControl nicht geladen ist.

Ich möchte wissen, wie ich das Laden der Kontrolle initiieren kann.

+0

ich Ihnen auch nur für die 'ContentControl.Loaded' Ereignis warten glauben konnte - etwas unter der Annahme, schließlich Laden in die Steuerung – Charleh

+0

@Charleh, nein. Ich habe auch darüber nachgedacht. Geparste Elemente werden jedoch erst geladen, wenn sie im Fenster angezeigt werden. –

Antwort

0

Das Problem ist gelöst. Ich habe root-Element in das Fenster eingefügt und Show-Methode aufgerufen.

<Window> 
    <StackPanel x:Name='Element1'> 
     <... /> 
    </StackPanel> 
</Window> 

Nach diesem VisualTreeHelper.GetChildrenCount und VisualTreeHelper.GetChild Methoden kehrt richtigen Werte für jedes Element

+0

Ich fand die bessere Lösung. Ich habe gerade Arrange-Methode mit nicht leerem Rect aufgerufen. –