动态表单域的组合框应以“打开”状态启动
本文关键字:打开 状态 启动 表单 组合 动态 | 更新日期: 2023-09-27 18:17:26
我正在WPF(C#(中创建一个动态表单,其中组合框的内容用于确定下一个组合框的内容。例如,第一个组合框具有以下值:
Beers
Juices
然后,第二个组合框将是
Carlsberg
Heineken
或
Apple
Orange
取决于第一个组合框的值。但是,我需要第二个组合框从打开位置开始,就好像用户已经单击了它一样。我曾考虑过使用列表框来显示选项,但它确实应该是一个组合框,并且确实需要从打开位置开始。有没有办法让组合框从打开位置开始,就好像用户已经单击了它一样,以显示所有可能的选项?
谢谢!
可以通过
设置属性IsDropDownOpen
以编程方式打开ComboBox
。要演示这一点,请执行以下操作:
XAML:
<StackPanel>
<ComboBox x:Name="comboBoxOne"
SelectionChanged="OnComboBoxOneSelectionChanged" >
<ComboBoxItem Content="Combo Box 1 - Item 1" />
<ComboBoxItem Content="Combo Box 1 - Item 2" />
</ComboBox>
<ComboBox x:Name="comboBoxTwo">
<ComboBoxItem Content="Combo Box 2 - Item 1" />
<ComboBoxItem Content="Combo Box 2 - Item 2" />
</ComboBox>
</StackPanel>
在代码隐藏中:
private void OnComboBoxOneSelectionChanged(object sender, SelectionChangedEventArgs e)
{
comboBoxTwo.IsDropDownOpen = true;
}
希望这有帮助!
编辑
如果您不想使用代码隐藏,则有很多选择。例如,您可以创建附加行为或使用转换器。
例如,使用转换器:
XAML:
<StackPanel>
<ComboBox x:Name="comboBoxOne"
SelectionChanged="OnComboBoxOneSelectionChanged" >
<ComboBoxItem Content="Combo Box 1 - Item 1" />
<ComboBoxItem Content="Combo Box 1 - Item 2" />
</ComboBox>
<ComboBox x:Name="comboBoxTwo"
IsDropDownOpen="{Binding ElementName=comboBoxOne, Path=SelectedItem, Mode=OneWay, Converter={l:NullToBoolConverter}}">
<ComboBoxItem Content="Combo Box 2 - Item 1" />
<ComboBoxItem Content="Combo Box 2 - Item 2" />
</ComboBox>
</StackPanel>
转炉:
public class NullToBoolConverter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在这里 - 每次在第一个ComboBox
中更改选择时,都会更新第二个Binding
,并执行Converter
。我正在检查 null,因为我们不希望它在启动时打开(在本例中(。
所有这些都假设您已经知道如何使用触发器动态设置ItemsSource
,而真正的问题是如何让第二个ComboBox
处于已经打开的状态:)