没有选择项的组合框。仅弹出复选框

ComboBox without selection item. Only popup checkboxes

我有一个组合框。打开时显示复选框。

问题:当 checking/unchecking 一个成为我的组合框的选定项时。我不要那个。

我试过了:

            <ComboBox Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" 
                Name="flagComboBox" IsTextSearchEnabled="True" Margin="0,10,0,0"
                IsEditable="False" Text="-- Select flags -- (does not show)"
                >
                <ComboBox.ItemTemplate>
                    <DataTemplate >
                        <CheckBox Name="checkFileException"
                            Checked="Check_Flag" Unchecked="Uncheck_Flag" 
                            Content="{Binding}" 
                            CommandParameter="{Binding}"
                            >
                        </CheckBox>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

你可以这样做:

在XAML,首先,改

Text="-- Select flags -- (does not show)"

PlaceholderText="-- Select flags --"

然后,当用户在 ComboBox 中更改选择时添加一个事件

SelectionChanged="ComboBox_SelectionChanged"

在您的代码中,添加:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        flagComboBox.SelectedIndex = -1;

    }

用户将在 ComboBox 中看到 PlaceholderText

编辑: 如果你想一直打开 ComboBox 直到用户按下屏幕上的任何其他地方(这样用户即使点击文本也会继续看到 ComboBox)你可以做一个解决方法:

在您的 XAML 文件中,将三个事件添加到 ComboBox:

GotFocus="flagComboBox_GotFocus" LostFocus="flagComboBox_LostFocus" DropDownClosed="flagComboBox_DropDownClosed"

在代码中,创建一个新的 bool 来指示用户是否正在使用 ComboBox

public sealed partial class MainPage : Page
{
    bool isPointerOnComboBox = false; // <-- add the bool here
    public MainPage()

然后,加上这三个空洞

private void flagComboBox_DropDownClosed(object sender, object e)
    {
        if (isPointerOnComboBox.Equals(true))
        {
            flagComboBox.IsDropDownOpen = true;
        }
    }

    private void flagComboBox_GotFocus(object sender, RoutedEventArgs e)
    {
        isPointerOnComboBox = true;
    }

    private void flagComboBox_LostFocus(object sender, RoutedEventArgs e)
    {
        isPointerOnComboBox = false;
    }

如果组合框获得焦点(它被用户选中),组合框将自动重新打开。如果 ComboBox 没有获得焦点(用户单击其他地方),ComboBox 将不会重新打开。