2009-10-15 13 views
0

Quelqu'un pourrait-il peut me expliquer pourquoi l'exemple simple suivant fonctionne:Comment puis-je obtenir les contrôles WPF GridSplitter travaillant à l'intérieur d'un ItemsControl?

<ItemsControl x:Class="UserControl1" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition Height="5" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Grid Background="Yellow" /> 

     <GridSplitter Grid.Row="1" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" /> 

     <Grid Grid.Row="2" 
       Background="Orange" /> 
    </Grid> 
</ItemsControl> 

... mais quand je fais le principal du ItemsPanelTemplate, il n'a pas:

<ItemsControl x:Class="UserControl1" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition Height="5" /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <Grid Background="Yellow" /> 

    <GridSplitter Grid.Row="1" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" /> 

    <Grid Grid.Row="2" Background="Orange" /> 
</ItemsControl> 

Ils ont tous deux un affichage Boîte jaune sur le dessus d'une boîte orange, avec un séparateur horizontal entre eux. Dans le premier exemple, le séparateur fonctionne correctement, ce qui vous permet de redimensionner les deux zones. Dans le deuxième exemple (qui produit un arbre visuel presque identique), le séparateur est verrouillé, il ne me permettra pas de le faire glisser pour redimensionner les deux zones!

Ceci est un exemple très simplifié de ce que j'essaie de réaliser - mais il montre le problème que je rencontre dans mon application actuelle. Je dois manquer quelque chose, qu'est-ce qui empêche le séparateur de fonctionner? Les trois enfants sont ajoutés à la grille ItemsPanelTemplate ok ....

Une explication ou une correction serait grandement appréciée!

Cordialement, Dave

Répondre

3

oh ne répondit? c'est parce que GridSplitter doit être l'enfant immédiat de la grille parent pour connaître la taille réelle des colonnes.