WPF,什么样的控件将处理MouseLeftButtonDown事件?

WPF,什么样的控件将处理MouseLeftButtonDown事件?,wpf,routed-events,Wpf,Routed Events,我有一个DataGridControl,它的单元格的DataTemplate被覆盖到TextBoxs,通过在单元格外但仍然在DataGrid上单击,我希望TextBox失去键盘焦点,这样它就可以提交更改,但DataGrid似乎不会处理MouseLeftButtonDown事件,所以我必须手动向网格添加一个处理程序,在处理程序中: e.Handled = true; Keyboard.Focus( sender as UIElement ); 使父面板“可聚焦”

我有一个DataGridControl,它的单元格的DataTemplate被覆盖到TextBoxs,通过在单元格外但仍然在DataGrid上单击,我希望TextBox失去键盘焦点,这样它就可以提交更改,但DataGrid似乎不会处理MouseLeftButtonDown事件,所以我必须手动向网格添加一个处理程序,在处理程序中:

        e.Handled = true;
        Keyboard.Focus( sender as UIElement );
使父面板“可聚焦”

通过使用Snoop,我注意到TextBox、Button等控件能够处理MosueLeftButtonDown事件,而如果将“Focusable”属性设置为“True”,面板则不能处理该事件。有人知道这背后的原因吗,谢谢

为了简化情况:假设我们在网格上有一个文本框和一个按钮:

<Grid Background="AliceBlue">
    <TextBox Height="25" Margin="50" Text="abcd"/>
    <Button  Height="25" Margin="50,100,50,0"></Button>
</Grid>

当我点击文本框时,它会得到键盘焦点,当我单击网格的空白区域时,我希望文本框失去焦点,问题是与文本框和按钮相比,网格是不可聚焦的。


Panel的文档显示Panel可以处理鼠标事件:


WPF的活动系统功能相当广泛。从UIElement派生的任何东西都能够处理鼠标/键盘和其他类型的事件。无法“侦听”面板上的事件的原因可能是因为默认情况下“无任何颜色”(即空背景或其他)的视觉系统不处理事件。请注意,透明颜色确实可以处理事件:这是一种在不影响视觉效果的情况下捕获事件的非常常见的方法。感谢Mario,这里的问题不是容器面板无法侦听鼠标事件,而是默认情况下,它无法获得键盘焦点以响应其上的鼠标向下事件,键盘焦点仍然是DatagridCell中的Texbox。