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
。我檢查null,因爲我們不希望它在啓動時打開(在本例中)。
所有這一切都假定你已經知道如何設置ItemsSource
動態使用觸發器,而真正的問題是如何讓一個已經打開的狀態:)
看看HTTP第二
ComboBox
:// stackoverflow.com/questions/4327012/wpf-cascading-comboboxes-dependent-ones-dont-update –@pratapchandra:雖然當然充滿了有用的信息,但這個問題與這個問題無關。爲了澄清,組合框僅在用戶點擊它之後才顯示其初始狀態中的所有選項。然而,在我當前項目的獨特約束條件下,當組合框動態添加時(就像你鏈接到的問題一樣),所有選項都會顯示('打開'狀態),就好像用戶點擊了一樣在上面。 – dotancohen