留下一个下拉的组合框会吞噬WPF中的焦点
本文关键字:吞噬 WPF 焦点 组合 下一个 | 更新日期: 2023-09-27 17:57:56
我有以下问题:在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
此行为是有意的。它是通过创建一个面板(Canvas
)来实现的,该面板的Background
属性设置为Transparent
,在显示包含下拉列表内容的Popup
之前覆盖整个RootVisual
。这样,ComboBox
控件可以捕获整个RootVisual
区域中的鼠标单击,并在检测到单击时关闭下拉列表。
我不建议改变这种行为,真的。它是以用户期望的方式实现的。如果您真的想改变预期的行为,可以在视图的代码隐藏(YourUserControl.xaml.cs
)中的组合框中添加路由事件处理程序。
MyComboBox.AddHandler(
UIElement.MouseLeftButtonDownEvent,
new MouseButtonEventHandler(
(sender, e) =>
{
MyButton.Command.Execute(null);
}),
handledEventsToo: true
);