我有以下问题:在WPF窗口中我放置了一个组合框和一个按钮。我下拉组合框,当组合框仍然下降时,我点击按钮。按钮在鼠标单击时没有反应,但是下拉的组合框关闭。点击第二次鼠标后,按钮会做出反应。 以下是代码示例:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="100" Width="300">
<Grid>
<ComboBox VerticalAlignment="Top" HorizontalAlignment="Left"
Width="100" IsSynchronizedWithCurrentItem="True" >
<ComboBoxItem Content="item 1"/>
<ComboBoxItem Content="item 2"/>
<ComboBoxItem Content="item 3"/>
</ComboBox>
<Button Content="Test" VerticalAlignment="Bottom" HorizontalAlignment="Right"
Width="100" Click="Button_Click" />
</Grid>
</Window>
和背后的代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button clicked");
}
如何防止组合框吞下按钮上的焦点?感谢。
关于mc
答案 0 :(得分:0)
此行为是有意的。它是通过创建一个面板(Canvas
)来实现的,其Background
属性设置为Transparent
,覆盖整个RootVisual
,然后显示包含该放置的Popup
-down list的内容。这样,ComboBox
控件可以捕获整个RootVisual
区域中的鼠标点击,并在检测到点击时关闭下拉列表。
我不建议真的改变这种行为。它以用户期望的方式实现。如果您确实想要改变预期的行为,可以将路由事件处理程序添加到视图代码后面的组合框中(YourUserControl.xaml.cs
)。
MyComboBox.AddHandler(
UIElement.MouseLeftButtonDownEvent,
new MouseButtonEventHandler(
(sender, e) =>
{
MyButton.Command.Execute(null);
}),
handledEventsToo: true
);