没有选择项的组合框。仅弹出复选框
ComboBox without selection item. Only popup checkboxes
我有一个组合框。打开时显示复选框。
问题:当 checking/unchecking 一个成为我的组合框的选定项时。我不要那个。
- 我想禁用可选项目,因为逻辑是在组合框弹出窗口中的 checking/unchecking 个项目时完成的。
- 最好是默认文本“-- Select flags --”。
我试过了:
- IsReadOnly 属性 不存在。无法选择。可能是因为我的 ItemTemplate 因为它不是 - TextBox(我不知道)。
- IsEditable="False" 不起作用
- IsHitTestVisible, IsEnabled="False" 使其无法打开。我无法勾选复选框
<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 将不会重新打开。
我有一个组合框。打开时显示复选框。
问题:当 checking/unchecking 一个成为我的组合框的选定项时。我不要那个。
- 我想禁用可选项目,因为逻辑是在组合框弹出窗口中的 checking/unchecking 个项目时完成的。
- 最好是默认文本“-- Select flags --”。
我试过了:
- IsReadOnly 属性 不存在。无法选择。可能是因为我的 ItemTemplate 因为它不是 - TextBox(我不知道)。
- IsEditable="False" 不起作用
- IsHitTestVisible, IsEnabled="False" 使其无法打开。我无法勾选复选框
<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 将不会重新打开。