我建立了一個ComboBox
約20 ComboBox items
在它。我希望能夠限制用戶可以看到的數字,當他們點擊一個複選框,例如Combobox只顯示一些comboxitems
if (checkbox1.ischecked)
{
combobox1.items = item 1, item 2 // correct code here
}
一直在尋找網頁和MSDN等,我甚至不知道它可能在正確的方向上沒有任何指針將理解
我建立了一個ComboBox
約20 ComboBox items
在它。我希望能夠限制用戶可以看到的數字,當他們點擊一個複選框,例如Combobox只顯示一些comboxitems
if (checkbox1.ischecked)
{
combobox1.items = item 1, item 2 // correct code here
}
一直在尋找網頁和MSDN等,我甚至不知道它可能在正確的方向上沒有任何指針將理解
基本上,你將必須決定哪些項目將被添加到適合你,但在這個例子中,我只是挑選前5項:
if (checkBox1.IsChecked)
{
ObservableCollection<YourItemType> filteredCollection = originalItemsSource.Take(5);
comboBox1.ItemsSource = filteredCollection;
}
else comboBox1.ItemsSource = originalItemsSource;
還請注意,我假設您已將ComboBox.ItemsSource
設置爲集合(f全部收集)名爲originalItemsSource
,其中仍然是完整無損。
基於他在這個問題下的評論,我認爲他是在Xaml中手動添加每個項目。 –
謝謝@Kazuo,我沒有注意到......都一樣,他仍然可以將對他的XAML聲明項的引用存儲在'originalItemsSource 'Loaded'事件(或類似)中的參數,然後按原樣使用此代碼示例。 – Sheridan
我同意這裏的方法是根據您的答案過濾組合框源。根據您的假設,在OP不理解您的解決方案的情況下留下評論。 –
如果你不想改變集合,你可以簡單地調整知名度,所以給這個XAML
<ComboBox x:Name="itemsBox">
<ComboBox.Items>
<ComboBoxItem x:Name="itemRed" Content="Red"/>
<ComboBoxItem Content="White"/>
<ComboBoxItem x:Name="itemBlue" Content="Blue"/>
</ComboBox.Items>
</ComboBox>
<CheckBox x:Name="checkBox" Click="checkBox_Click"/>
你只需要,
private void checkBox_Click(object sender, RoutedEventArgs e)
{
itemBlue.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
itemRed.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
}
不過謝里丹的回答遠從長遠來看,過濾更加靈活是一種更好的方法。如果你正在嘗試做的除揭露什麼/隱藏固定的一組項目(注意我的上面明確命名的),你真的應該移動到ItemsSource
也就是說,如果你開始這樣做,
private void checkBox_Click(object sender, RoutedEventArgs e)
{
foreach(var x in new ComboBoxItem[] { ItemBlue, ItemRed /*, etc*/ })
{
x.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
}
}
然後將其重構爲一個ItemsSource
你從哪裏獲得組合框的項目? – Andrew
你是什麼意思限制他們可以看到的數量?你的意思是使可視區域在組合框下拉框中變小?你的意思是隻添加項目到組合框中的用戶設置的限制複選框?你可以給我們更多關於你的要求的信息嗎? –
抱歉沒有解釋得很好。 – CM99