2017-06-23 2 views
0

Ich habe mehrere Fälle, in denen ein Benutzer möglicherweise zusätzliche Daten auf der Basis einer Auswahl von Kombinationsfeldern eingeben muss. Die Anzahl der notwendigen Textfelder ändert sich je nach Auswahl (min 1- max 3). Um diese Elemente zu organisieren, habe ich sie in GroupBox (s). Was ich brauche, ist ein Ratschlag, um diesen Effekt zu erreichen. Soll ich programmgesteuert Zeilen zu einem Raster innerhalb der Groupbox hinzufügen? Sollte ich alle Textfelder und Beschriftungen erstellen und die Sichtbarkeitseigenschaft bei Auswahl geändertem Ereignis ändern? Ich mag die zweite Idee nicht wirklich, weil die Groupbox unpassend skaliert wird, wenn nur ein Textfeld benötigt wird. Ich erkenne den allgemeinen Kontext meiner Frage, als Novize mit WPF brauche ich nur einen Rat zu Best Practices, um dies zu erreichen.Dynamische Kontrollsätze bei Auswahl der Kombinationsfelder

Update Ich habe versucht, die Zeile bei Auswahl ändern zu reduzieren. Dadurch wird der Inhalt zwar gelöscht, aber meine Groupbox bleibt immer gleich groß.

<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> 

Mit dieser Zeilen im Code zum Einsturz:

 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); 
     } 

    } 

Was ich hier werde eine Gruppe Feld, das es Höhe auf die Kontrollen pro Benutzerauswahl benötigt basierend ändert.

+0

In Bezug auf Ihren zweiten Punkt, sollten Sie keine Probleme mit der Größe der Groupbox haben, wenn die Sichtbarkeit auf reduziert statt versteckt eingestellt ist. – MoonBoots89

Antwort

0

Ihre beiden Ideen sind gültig. Die Frage ist ein wenig schwierig zu beantworten, ohne den Code zu sehen, aber im Allgemeinen möchte ich zunächst über Wartbarkeit nachdenken - Code wird typischerweise viel öfter gelesen, als er geschrieben wurde.

Ich vermute, dass das einfache Zusammenklappen der zusätzlichen Felder, die nicht benötigt werden, einfacher und wartbarer als zusätzliche Felder erstellen und zur Laufzeit binden kann.

Probieren Sie es einmal und sehen Sie, wie es aussieht - verbringen Sie nicht zu lange damit.

+0

Ich habe versucht, die Zeile bei Auswahländerung zu reduzieren. Dadurch wird der Inhalt zwar gelöscht, aber meine Groupbox bleibt immer gleich groß. – willkk

+0

Ich habe einen Testcode zum Posten hinzugefügt. Dies dient zum Verstecken von Inhalten, aber nicht zum Ändern der Größe von Groupbox. – willkk

+0

@willkk - Überprüfen Sie, dass die Rasterzeilen, die die GroupBox enthalten, nicht auf eine feste Höhe festgelegt sind. – MoonBoots89

Verwandte Themen