当我使用MouseUp事件时,我可以通过鼠标右键单击来触发它。但是MouseLeftButtonUp不会通过任何一次点击来触发!
<Button MouseLeftButtonUp="btnNewConfig_MouseUp" Name="btnNewConfig">
<StackPanel Orientation="Horizontal">
<Image Source="Icons\new.ico" Height="24" Width="24" Margin="5"/>
<TextBlock VerticalAlignment="Center">New</TextBlock>
</StackPanel>
</Button>我知道这很可能是很简单的事情。谢谢你的帮助!
发布于 2008-11-25 18:01:22
因为Button.Click实际上是LeftButtonDown事件和LeftButtonUp事件的组合,所以看起来Button控件正在吞噬该事件。
但是您可以在Button而不是LeftButtonUp上订阅隧道事件PreviewMouseLeftButtonUp。
发布于 2018-05-10 06:56:40
订阅隧道事件而不是气泡事件有一些相当混乱的副作用,我将在后面解释。
这里有一个更好的解决方案,因为它保持了你的泡沫完好无损。:)
btnNewConfig.AddHandler(MouseLeftButtonUpEvent,
new RoutedEventHandler(btnNewConfig_MouseUp),
true);您必须使用RoutedEventArgs而不是MouseButtonEventArgs来声明事件处理程序,但您可以直接将其转换回MouseButtonEventArgs inside。
void btnNewConfig_MouseUp(object sender, RoutedEventArgs e)
{
MouseButtonEventArgs args = e as MouseButtonEventArgs;
// ...
}请注意AddHandler中的最后一个参数-如果将其设为真,即使之前的处理程序设置为e.Handled = true;,也会触发事件
Now关于 PreviewMouseLeftButtonUp**:**
隧道事件在孩子之前为父母激发。冒泡--正好相反。如果涉及到许多事件处理程序,那么您应该坚持使用所有冒泡或所有隧道处理程序,否则添加的事件处理程序越多,它就会变得越混乱-添加一个新的事件处理程序可能会导致您重新访问应用程序中的所有其他事件处理程序。
大多数人发现冒泡模型要自然得多。这就是为什么公认的答案是有问题的。
发布于 2011-08-04 05:11:31
Button正在为其Button.Click事件使用鼠标左/右按钮向上/向下事件(并将它们标记为Handled)。
作为Jobi said,您可以使用PreviewMouseLeftButtonUp事件,但我建议您创建自己的按钮模板并修改其行为。(例如,不要将MouseLeftButtonUp标记为Handled = true),或者简单地使用Button以外的其他东西作为父容器(取决于您真正需要它的用途)。
https://stackoverflow.com/questions/318288
复制相似问题