c# - MouseLeftButtonUp 不触发

标签 c# wpf events button mouseevent

我有一个按钮

<Button>
    <Button.Template>
        <ControlTemplate>
            <StackPanel>
                <Image Source="share.png" 
                       MouseLeftButtonUp="Image_MouseLeftButtonUp"
                       MouseLeftButtonDown="Image_MouseLeftButtonDown" />
            </StackPanel>
        </ControlTemplate>
    </Button.Template>
</Button>

但问题是,与 MouseLeftButtonDown 不同,MouseLeftButtonUp 事件不会触发。为什么?我该如何解决?谢谢。

最佳答案

可能是因为 Button 已经在处理事件,所以它不会向下过滤到 Image 控件。

为什么要处理 Image 上的 MoustUp 和 MouseDown 事件?为什么不在 Button 上处理它们?

编辑
快速查看此事件的文档后,我看到 MouseLeftButtonUp 的路由策略是Direct ,但实际的基础事件是 MouseUp具有 Bubbling 的事件战略。所以,实际上,MouseLeftButtonUp 应该有一个事实上的冒泡策略,这意味着 Image 应该有机会在 Button 之前处理事件.

听起来好像还有其他事情要发生。如果在 Image 控件上将 Image 设置为空,并且背景为 null(不同于 Color.Transparent),则 WPF 会将控件视为鼠标事件不“存在”。

编辑 2
嗯……也许我最初的猜测毕竟是正确的。根据这个线程:
http://social.msdn.microsoft.com/forums/en/wpf/thread/e231919d-9fef-4aa5-9dcb-2c1eb68df25b/#306db880-ed50-45d2-819f-88d76f7148c1
Button 正在处理 MouseUp 事件。尝试使用 PreviewMouseUp然后检查点击了哪个按钮。

编辑 3
好的...我想我明白了。我敢打赌 Button 在 MouseDown 事件中“捕获”了 Mouse。发生这种情况时,其他控件将不会收到 MouseUp 或 MouseDown 事件(包括预览版),直到鼠标被释放。
请参阅:http://books.google.com/books?id=nYl7J7z3KssC&pg=PA146#v=twopage&q&f=true

关于c# - MouseLeftButtonUp 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496258/

相关文章:

wpf - 如何在没有 Prism 的情况下在 WPF 中实现区域?

.net - 在 WPF DataGrid 中绑定(bind) ComboBoxColumn 的 ItemsSource

c# - 在以下情况下使用静态方法访问数据库是否安全

c# - ASP.Net - Global.asax 的存在阻止并行请求执行?

wpf - wpf自定义控件库和wpf类库有什么区别

javascript - 如何组合多个onclick Action ?

javascript - JQuery 更改事件下载文件

javascript - Dojo 元素/小部件定位,我做错了什么?

c# - 获取 OAuth session 的过期时间

c# - 锁定列表会产生死锁