A ComboBox
можно программно открыть, установив свойство IsDropDownOpen
.Чтобы продемонстрировать это:
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
выполняется.Я проверяю ноль, так как мы не хотим, чтобы он открывался при запуске (в этом примере).
Все это предполагает, что вы уже знаете, как динамически установить ItemsSource
с помощью триггеров, и этореальный вопрос в том, как получить второй ComboBox
в уже открытом состоянии:)