J'ai plusieurs cas où un utilisateur peut avoir besoin d'entrer des données supplémentaires en fonction d'une sélection de zone de liste déroulante. Le nombre de zones de texte nécessaires change en fonction de la sélection (min 1- max 3). Afin de garder ces éléments organisés, je les ai dans GroupBox (s). Ce dont j'ai besoin, c'est de conseils pour atteindre cet effet. Dois-je ajouter par programme des lignes à une grille dans la zone de groupe? Dois-je créer toutes les zones de texte et toutes les étiquettes et modifier la propriété de visibilité lors de la sélection d'un événement modifié? Je n'aime pas vraiment la deuxième idée parce que la boîte de groupe sera mise à l'échelle de façon inappropriée si un seul champ de texte est requis. Je me rends compte du contexte général de ma question, en tant que novice avec WPF, j'ai juste besoin de conseils sur les meilleures pratiques pour y parvenir.Jeux de contrôles dynamiques sur la sélection de zone de liste déroulante
Mise à jour J'ai essayé de réduire la ligne sur le changement de sélection. Cela supprime le contenu mais laisse toujours ma boîte de groupe de la même taille.
<GroupBox Name="gbCondensor" Height="Auto" Header="Condensor"
FontSize="16" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"
Margin="20,0,20,92" Grid.RowSpan="2">
<Grid Name="grdCondensor" Margin="0,10,0,0" Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label x:Name="lblCondensorTemp" Grid.Column="0" Grid.Row="0"
Content="Condensor Temperature" HorizontalAlignment="Center"
VerticalAlignment="Center" Height="32" Width="255"/>
<ComboBox Name="cmbCondensorTemp" FontSize= "16" Width="200"
Grid.Column="1" Grid.Row="0" VerticalAlignment="Center"
HorizontalAlignment="Left" Margin="10,0" Height="30">
<ComboBoxItem IsSelected="True">Constant</ComboBoxItem>
<ComboBoxItem>Linear</ComboBoxItem>
<ComboBoxItem>Switching</ComboBoxItem>
</ComboBox>
<Label Name="lblCondensorTempText" Content="Temperature"
VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Column="0"
Grid.Row="2" ></Label>
<TextBox Name="txtCondensorTemp" Grid.Column="1" Grid.Row="2"
Background="Gray" VerticalAlignment="Center" HorizontalAlignment="Center"
Width="73"></TextBox>
<Label Name="lblEndCondTemp" Content="Temperature"
VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Column="0"
Grid.Row="3" ></Label>
<TextBox Name="txtEndCondTemp" Grid.Column="1" Grid.Row="3"
Background="Gray" VerticalAlignment="Center" HorizontalAlignment="Center"
Width="73"></TextBox>
<Label Name="lblSwitchCondTemp" Content="Temperature"
VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Column="0"
Grid.Row="4" ></Label>
<TextBox Name="txtSwitchCondTemp" Grid.Column="1" Grid.Row="4"
Background="Gray" VerticalAlignment="Center" HorizontalAlignment="Center"
Width="73"></TextBox>
</GroupBox>
Avec ce pour replier les lignes dans le code:
void CheckCondensorComboBox(object sender, SelectionChangedEventArgs e)
{
if (cmbCondensorTemp.SelectedIndex == 0)
{
lblEndCondTemp.Visibility = Visibility.Collapsed;
txtEndCondTemp.Visibility = Visibility.Collapsed;
grdCondensor.RowDefinitions[3].Height = new GridLength(0);
lblSwitchCondTemp.Visibility = Visibility.Collapsed;
txtSwitchCondTemp.Visibility = Visibility.Collapsed;
grdCondensor.RowDefinitions[4].Height = new GridLength(0);
}
else if (cmbCondensorTemp.SelectedIndex == 1)
{
lblEndCondTemp.Visibility = Visibility.Visible;
txtEndCondTemp.Visibility = Visibility.Visible;
grdCondensor.RowDefinitions[3].Height = new GridLength(30);
lblSwitchCondTemp.Visibility = Visibility.Collapsed;
txtSwitchCondTemp.Visibility = Visibility.Collapsed;
grdCondensor.RowDefinitions[4].Height = new GridLength(0);
}
else if (cmbCondensorTemp.SelectedIndex == 2)
{
lblEndCondTemp.Visibility = Visibility.Visible;
txtEndCondTemp.Visibility = Visibility.Visible;
grdCondensor.RowDefinitions[3].Height = new GridLength(30);
lblSwitchCondTemp.Visibility = Visibility.Visible;
txtSwitchCondTemp.Visibility = Visibility.Visible;
grdCondensor.RowDefinitions[4].Height = new GridLength(30);
}
}
Ce que je vais faire ici est une zone de groupe qui change sa hauteur sur la base des contrôles nécessaires par sélection de l'utilisateur.
En ce qui concerne votre deuxième point, vous ne devriez pas avoir de problèmes avec la taille de la zone de groupe si la visibilité est réduite ou masquée. – MoonBoots89