我在WPF应用程序中有一个ComboBox
,它包含多个ComboBoxItems
,每个CheckBox
都托管一个CheckBox
。我希望用户能够在不实际选择ComboBoxItem的情况下切换CheckBox。目前,如果我单击复选框,它会正确选中复选框,但如果我单击该项目,(而不是复选框)它选择该项目,而不是我只是想使用这个列表来选择复选框,并不希望有任何项目选定。
DEMO -单击复选框时:
x1c 0d1x的数据
DEMO -如果我点击该项目:
的
正如你所看到的,当我点击该项目,在复选框,然后它检查该项目,但如果我点击该项目,然后选择并显示该项目.我只关心检查项目,不想:
1.当屏幕关闭时是否显示任何项目
1.可以选择任何项目。
XAML代码:
<ComboBox Margin="40,10,0,2" Name="ComboBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="250" Height="30" Loaded="ComboBox1_Loaded">
<!-- The items will be added programmatically -->
</ComboBox>
字符串
C#代码隐藏:
private void ComboBox1_Loaded(object sender, RoutedEventArgs e)
{
// List of items to be added to the ComboBox
string[] items = new string[] {
"Example1", "Example2", "Example3", "Example14", "Example5",
};
foreach (string item in items)
{
// Create a new CheckBox
System.Windows.Controls.CheckBox checkBox = new System.Windows.Controls.CheckBox
{
Content = item,
Name = "chk" + item.Replace(" ", "")
};
// Create a new ComboBoxItem and add the CheckBox to it
ComboBoxItem comboBoxItem = new ComboBoxItem();
comboBoxItem.Content = checkBox;
// Add the ComboBoxItem to the ComboBox
ComboBox1.Items.Add(comboBoxItem);
}
}
private void ComboBox1_DropDownClosed(object sender, EventArgs e)
{
// StringBuilder to hold all checked items
var checkedItems = new StringBuilder();
foreach (ComboBoxItem comboBoxItem in ComboBox1.Items)
{
if (comboBoxItem.Content is System.Windows.Controls.CheckBox checkBox && checkBox.IsChecked == true)
{
// Add the checked item to the StringBuilder
checkedItems.AppendLine(checkBox.Content.ToString());
}
}
// Check if we have any checked items and write them to debug output
if (checkedItems.Length > 0)
{
Debug.WriteLine("Checked Items:");
Debug.WriteLine(checkedItems.ToString());
}
}
型
希望你能帮我解决这个问题。
最好的,
1条答案
按热度按时间p4tfgftt1#
如果你不需要ComboBox的功能,其他控件如Menu也可以。这里是一个使用CommunityToolkit.Mvvm的示例。
您可以通过迭代ObservableCollection来检查是否检查了每个项。