离开一个下拉的ComboBox吞下了WPF的焦点

时间:2014-04-12 06:32:51

标签: c# wpf combobox

我有以下问题:在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

1 个答案:

答案 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
);