[英]Dynamic Control sets on combobox selection
我有几种情况,用户可能需要根据组合框选择输入其他数据。 所需文本框的数量根据选择而变化(最小1至最大3)。 为了使这些项目井井有条,我将它们放在GroupBox中。 我需要的是有关实现此效果的建议。 是否应该以编程方式将行添加到组框内的网格中? 我应该创建所有文本框和标签并在选择更改事件上更改可见性属性吗? 我不太喜欢第二个想法,因为如果只需要一个文本字段,则无法适当缩放groupbox。 作为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);
}
}
我要在这里创建的是一个分组框,它可以根据每个用户选择所需的控件来更改其高度。
您的两个想法都是正确的。 特别是在没有看到代码的情况下,这个问题很难回答,但是总的来说,我喜欢首先考虑可维护性-代码的读取次数通常比编写的次数多。
我怀疑,简单地折叠不需要的额外字段可能比创建额外的字段并在运行时绑定它们更为直接和可维护。
尝试一种方法,看看它的外观-不要花太长时间称量它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.