【问题标题】:WPF, what kind of controls will handle MouseLeftButtonDown event?WPF,什么样的控件将处理 MouseLeftButtonDown 事件?
【发布时间】:2015-02-16 08:49:19
【问题描述】:

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

        e.Handled = true;
        Keyboard.Focus( sender as UIElement );

使父面板“可聚焦”。

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

为了简化情况:假设我们在 Grid 上有一个 TextBox 和一个 Button:

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

当我点击 TextBox 时,它会获得 KeyBoard 焦点,当我点击 Grid 的空白区域时,我希望 TextBox 失去焦点,问题是 Grid 与 TextBoxes 和 Buttons 相比无法获得焦点。

【问题讨论】:

  • WPF 的事件系统相当通用。从 UIElement 派生的任何东西都能够处理鼠标/键盘和其他类型的事件。您无法“收听”面板上的事件背后的原因可能是因为默认情况下“没有任何颜色”的视觉效果(即空背景左右)不处理事件。请注意,透明颜色确实可以处理事件:这是在不影响视觉结果的情况下捕获事件的一种非常常见的方式。
  • 谢谢马里奥,这里的问题不是容器Panel无法监听鼠标事件,而是默认无法获取键盘焦点响应MouseDown事件,键盘焦点仍然在DatagridCell中的Texbox .

标签: wpf routed-events


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2010-12-26
    • 2015-02-02
    • 2015-08-02
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多