2010-04-22 3 views
1

Actuellement, j'ai un bouton bascule qui est lié à une propriété booléenne (DualLayout) dans mon code derrière. Lorsque le booléen est défini sur Vrai, je veux que ma deuxième ligne de ma grille (et mailleur de grille) se cache et que la première ligne prenne toute l'espace de la grille. Une fois que le booléen a la valeur False, je veux que le séparateur de grille et la ligne du bas apparaissent.Comment afficher/masquer une ligne de grille et un séparateur de grille en fonction d'un bouton bascule?

Voici un extrait de mon XAML

<ToggleButton Name="toggleLayout" Margin="66,1,0,1" Width="25" HorizontalAlignment="Left" IsChecked="{Binding DualLayout}" Checked="toggleLayout_Clicked" Unchecked="toggleLayout_Clicked"> 
      <ToggleButton.Style> 
       <Style TargetType="{x:Type ToggleButton}"> 
        <Style.Triggers> 
         <Trigger Property="IsChecked" Value="true"> 
          <Setter Property="ContentTemplate"> 
           <Setter.Value> 
            <DataTemplate DataType="{x:Type ToggleButton}"> 
             <Image Source="Images/PlayHS.png"/> 
            </DataTemplate> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="ToolTip" Value="Receive and Transmit Windows Split."/> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="false"> 
          <Setter Property="ContentTemplate"> 
           <Setter.Value> 
            <DataTemplate DataType="{x:Type ToggleButton}"> 
             <Image Source="Images/PauseHS.png"/> 
            </DataTemplate> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="ToolTip" Value="Receive and Transmit Windows Combined."/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </ToggleButton.Style> 
     </ToggleButton> 
    <Grid x:Name="transmissionsGrid" Margin="0,28,0,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*" MinHeight="100" /> 
     </Grid.RowDefinitions> 
     <transmission:TransmissionsControl x:Name="transmissionsReceive" TransmissionType="Receive" Margin="0,0,0,5" /> 
     <GridSplitter Name="gridSplitter1" Grid.Row="0" Background="White" Cursor="SizeNS" Height="4" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Foreground="Firebrick" /> 
     <transmission:TransmissionsControl x:Name="transmissionsTransmit" TransmissionType="Transmit" Grid.Row="1" /> 
    </Grid> 

Répondre

1

Ce n'est pas testé, mais je crois que cela devrait fonctionner.

Tout d'abord, si vous voulez que votre première ligne pour prendre tout l'espace, vous aurez envie de définir vos RowDefinitions comme

<Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="Auto" /> <!-- Edit: Removed MinHeight="100" --> 
</Grid.RowDefinitions> 

Pour montrer/cacher les commandes, vous aurez besoin de lier leur visibilité propriété soit à votre propriété DualLayout (si la classe implémente correctement INotifyPropertyChanged), ou (peut-être plus simplement) à la propriété IsChecked du ToggleButton.

Par exemple (le même pour la GridSplitter):

<!-- EDIT: Added MinHeight="100" here instead --> 
<transmission:TransmissionsControl x:Name="transmissionsTransmit" 
       TransmissionType="Transmit" 
       Grid.Row="1" 
       MinHeight="100" 
       Visibility={Binding ElementName=toggleLayout, 
            Path=IsChecked, 
            Converter={StaticResource boolToVis}}" /> 

À un certain niveau au-dessus des contrôles en question (ici, je le fais au niveau de la fenêtre) vous devez ajouter intégrée des ressources BooleanToVisibilityConverter :

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="boolToVis" /> 
</Window.Resources> 
+0

Masquer les contrôles (GridSplitter et Bottom Control), mais le contrôle supérieur ne remplit plus tout l'espace. Il reste à la même hauteur – Travyguy9

+0

Vous devez définir l'alignement vertical de votre grille sur Stretch. En ce moment, la grille ne sait pas remplir tout l'espace disponible. Notez que vous pouvez également définir HorizontalAlignment Stretch si vous souhaitez qu'il remplisse l'espace horizontal. Je suppose que vous avez également apporté la modification aux RowDefinitions que j'ai spécifiées ci-dessus. Espérons que cela aide! –

+0

Désolé, cela n'a pas aidé. Il agit toujours de la même manière. Ai-je manqué quelque chose? Voici ce que j'ai obtenu (moins le bouton bascule). Il peut être difficile à lire à travers ce ... désolé J'ai également eu besoin de le casser afin que je puisse le coller .. – Travyguy9

Questions connexes