【发布时间】:2011-12-28 22:05:15
【问题描述】:
我有this 相同的问题,但提出的解决方案不起作用,我也没有找到任何其他解决方案。我想用CheckBoxes 创建一个ComboBox 作为ItemTemplate 的一部分。这已经实现了。但是当用户单击CheckBox 时出现问题:PopUp 关闭。我需要它保持打开状态。
我尝试处理ComboBox.SelectionChanged 事件和CheckBox.Click 事件,但我无法得到它。从跟踪代码来看,当用户单击 CheckBox 时,SelectionChanged 事件似乎根本没有触发,这与控件的行为相匹配,因为在 TextBox 部分中没有出现任何内容。
这不是用于多选,而是让CheckBox 绑定到数据上下文中的属性。
这里是一些示例代码
<Toolbar VerticalAlignment="Top">
<ComboBox x:Name="comboBox" SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate DataType="local:MyType">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<CheckBox Click="CheckBox_Clicked"/>
<TextBlock Text="{Binding Title}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
<local:MyType Title="item 1"/>
<local:MyType Title="item 2"/>
<local:MyType Title="item 3"/>
<local:MyType Title="item 4"/>
</ComboBox>
</Toolbar>
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// do some stuff
}
private void CheckBox_Clicked(object sender, RoutedEventArgs e)
{
// change a property on the data context if not data bound
// Tried this, but Popup just closes then reopens
comboBox.IsDropDownOpen = true;
// This seems to have no effect
e.Handled = true;
}
谁能帮忙?
编辑:
我注意到将ComboBox 放在Toolbar 中时的行为有所不同。当不在Toolbar 中时,它按预期运行:CheckBox 更改状态而不关闭Popup。但是在ToolBar 中,Popup 在第一次点击时关闭,无论点击在哪里。请尝试新代码。我真的需要这个在工具栏中。
编辑 2:
对于后代和任何搜索它的人,MS suggested 将 DataTemplate 中 CheckBox 的 Focusable 属性设置为 false。这样就达到了预期的效果。
【问题讨论】:
-
你首先不应该在 ComboBox 中有 CheckBoxes。
-
我同意@H.B.组合框不应该是多选的。原因是没有标准的方法来关闭组合框,即你必须找到一个不同的地方来点击它来关闭它。拥有某种可扩展元素以包含一个简单的列表框会更好。
-
我已将您的解决方案复制到空白 wpf 项目,但我无法重现您的问题:当我单击复选框时,弹出窗口仍然打开。只有当我点击组合框外的某个地方时它才会关闭。
-
@mydogisbox:正如我所说,这不适用于多项选择。这是用于编辑源对象的属性。 ComboBox 是用户常用的界面元素。这种类型的控件在 AutoCAD 中用于图层的基本编辑。
-
@vortex,我会在新的解决方案中尝试。也许我的项目中的其他东西导致了这个问题。
标签: wpf combobox checkbox popup