コンボボックス選択に基づいて追加のデータを入力する必要がある場合があります。必要なテキストボックスの数は選択に応じて変化します(最小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);
}
}
私はここのためつもりです何それはユーザの選択当たりに必要な制御に基づいて高さによる変更グループボックスです。
2つ目の点に関しては、可視性が非表示ではなく折りたたまれている場合、グループボックスのサイズに問題はありません。 – MoonBoots89