2010-07-15 8 views
1

J'essaie de créer un expandeur avec un bouton bascule/en-tête en tant que barre fine vers la gauche, mais lorsqu'il est déplié, il remplit le reste de la fenêtre, même sur du matériel déjà là.WPF: Comment créer une fenêtre de débordement et de remplissage Expander

Je ne suis pas vraiment sûr de la meilleure façon de le faire. Je pensais peut-être à une grille avec 2 colonnes. Premier aurait l'expandeur, deuxième l'autre matériel. Ensuite, j'aurais un déclencheur qui mettrait la largeur de la deuxième colonne à zéro lorsque le Expander IsExpanded.

Je ne suis pas vraiment sûr de savoir comment le faire fonctionner ou même comment le faire correctement.

Voici quelques exemples de code:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Name="SecondColumn" Width="*" /> 
     </Grid.ColumnDefinitions> 


     <Expander ExpandDirection="Right" IsExpanded="True"> 

      <Expander.Resources> 
       <Style TargetType="Expander"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="Expander" > 

           <ControlTemplate.Triggers> 
            <Trigger Property="IsExpanded" Value="True" > 
             <Setter TargetName="SecondColumn" Property="ColumnDefinition.Width" Value="0" /> 
            </Trigger> 
           </ControlTemplate.Triggers> 

          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Expander.Resources> 

      <ListBox > 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid /> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
      </ListBox> 
     </Expander> 

     <TabControl Grid.Column="1" /> 

    </Grid> 

Je wan't la zone de liste à voir lorsqu'il est étendu, sinon le TabControl

Toutes les idées?

Répondre

1

Il semble que vous vouliez faire quelque chose de similaire à Karl Shifflett's example here. Il modifie simplement l'index z du contrôle de contenu dans ce cas et définit la hauteur de ligne manuellement pour donner l'illusion d'un popup, donc vous voudrez vous assurer que vous n'essayez pas d'autres éléments visuels de la même manière.

Vous devez vous assurer que vous définissez ColumnSpan et RowSpan sur votre Expander afin que, lorsqu'il s'étend, il couvre le contenu de ces lignes.

+0

Merci de m'avoir signalé cela, mais je pense que je ne l'utiliserais qu'en dernier recours, c'est comme si je me sentais comme un hack et je crains que cela ne se brise facilement. –

+0

L'autre chose que vous pouvez faire est de passer à un contrôle personnalisé faux expander composé d'un contrôle ToggleButton et un contrôle Popup. De cette façon, le popup sera garanti pour afficher sur tout ce qui apparaît là. Cependant, vous devrez simplement créer le contrôle vous-même. –

+0

Je vais vérifier ça. Et j'ai aussi essayé l'autre solution et ça pourrait aller, sauf que je m'inquiète de la taille et du redimensionnement de la fenêtre principale. Je suppose que je pourrais lier ensemble pour résoudre ce problème. –