WPF复选框控件不会对MouseLeftButtonDown事件做出反应

时间:2009-08-25 21:29:47

标签: wpf checkbox mouse mouseevent

我有以下XAML代码:

<Grid Background="Blue">
        <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
            <CheckBox MouseLeftButtonDown="CheckBox_MouseLeftButtonDown_1"></CheckBox>
        </Grid>
</Grid>

当我单击鼠标左键的复选框时,不会触发声明的事件。 任何人都可以解释这种行为吗? 提前致谢

3 个答案:

答案 0 :(得分:5)

事件由其他事件处理(可能由Checked事件消耗)。

如果您将事件更改为PreviewMouseLeftButtonDownMouseLeftButtonDown的隧道版),则会正常启动。

答案 1 :(得分:2)

CheckBox继承自ButtonBase,它为左按钮事件(OnMouseLeftButtonDown)添加了一个类处理程序。正如UIElement.MouseLeftButtonDown事件提及的文档(强调我的):

  

某些控件类可能有   鼠标的固有类处理   按钮事件。鼠标左键   down事件是最有可能发生的事件   在控件中进行类处理。该   班级处理往往标志着   基础Mouse类事件为   处理。一旦事件被标记   处理,其他实例处理程序   附加到该元素不是   通常提出。任何其他类或   附加到的实例处理程序   冒泡方向的元素   朝向UI树中的根是   通常也不会提高。

您可以使用ClickMode并将其设置为ClickMode.Hover,这似乎可以防止您看到的行为。但是,您可能必须在此特定实例的事件处理程序中维护自定义逻辑,以设置复选框的正确切换状态。

您还可以尝试使用PreviewMouseLeftButtonDown事件。但是,在处理程序中标记该事件可能会对其余的MouseDown事件产生副作用 - 它们将携带处理的信息,这将阻止其他实例处理程序,除非它们与AddHandler一起添加,并带有用于处理已处理事件的标志。

答案 2 :(得分:0)

Franci感谢您的回复......我需要复选MouseLeftDownEvent来解雇,设置clickMode = hover解决了我的问题。我需要MouseleftDownEvent将事件冒泡到父网格。

相关问题