2017-06-23 1 views
0

コンボボックス選択に基づいて追加のデータを入力する必要がある場合があります。必要なテキストボックスの数は選択に応じて変化します(最小1〜最大3)。これらのアイテムを整理しておくために、私はそれらをGroupBoxに持っています。私が必要とするのは、この効果を達成するためのアドバイスです。プログラムでグループボックス内のグリッドに行を追加する必要がありますか?選択した変更イベントですべてのテキストボックスとラベルを作成し、可視性プロパティを変更する必要がありますか?私は本当に1つだけのテキストフィールドが必要な場合、グループボックスが不適切に拡大縮小されるので、2番目のアイデアはあまり好きではありません。私はWPFの初心者として私の質問の一般的なコンテキストを実現するには、これを達成するためのベストプラクティスに関するアドバイスが必要です。コンボボックス選択時のダイナミックコントロール

更新 私は選択変更時に行を折り畳ませようとしました。これは内容を取り除きますが、私のグループボックスは同じサイズのままです。これにより

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

コード内の行を折りたたむします

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

    } 

私はここのためつもりです何それはユーザの選択当たりに必要な制御に基づいて高さによる変更グループボックスです。

+0

2つ目の点に関しては、可視性が非表示ではなく折りたたまれている場合、グループボックスのサイズに問題はありません。 – MoonBoots89

答えて

0

あなたのアイデアはどちらも有効です。質問はコードを見ることなく具体的​​に答えるのは少し難しいですが、一般的に言えば、私は保守性について考えることから始めます。まず、コードは書かれているよりもずっと多く読み込まれます。

不要な余分なフィールドを単に折りたたむだけでは、余分なフィールドを作成して実行時にバインドするよりも簡単でメンテナンスが容易なことが考えられます。

一見して見てみましょう - それを長時間かけすぎてはいけません。

+0

私は選択変更時に行を折りたたんでみました。これは内容を取り除きますが、私のグループボックスは同じサイズのままです。 – willkk

+0

投稿するテストコードを追加しました。これはコンテンツを隠してもグループボックスのサイズを変更しない場合に有効です。 – willkk

+0

@willkk - GroupBoxを含むグリッド行が固定された高さに設定されていないことを確認します。 – MoonBoots89

関連する問題