MouseLeftButtonUp不会触发

Nic*_*ick 5 c# wpf events button mouseevent

我有一个 Button

<Button>
    <Button.Template>
        <ControlTemplate>
            <StackPanel>
                <Image Source="share.png" 
                       MouseLeftButtonUp="Image_MouseLeftButtonUp"
                       MouseLeftButtonDown="Image_MouseLeftButtonDown" />
            </StackPanel>
        </ControlTemplate>
    </Button.Template>
</Button>
Run Code Online (Sandbox Code Playgroud)

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

JDB*_*JDB 8

可能是因为Button已经处理了事件,所以它不会过滤到Image控件.

你为什么要处理MoustUp和MouseDown事件Image?为什么不处理它们Button呢?

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

听起来像其他东西可能正在发生.如果在Image控件上将Image设置为nothing,并且background为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事件中"捕获"鼠标.发生这种情况时,其他控件将不会接收MouseUp或MouseDown事件(包括预览版本),直到释放鼠标.
请参阅:http://books.google.com/books?id=nYl7J7z3KssC&pg=PA146#v=twopage&q&f=true


Wil*_*ues 5

正如 Cyborgx37 所说,Click 事件正在处理 LeftMouseUp 事件。

您可以在按钮上使用PreviewMouseLeftButtonUp事件而不是MouseLeftButtonUp, ,如下所示:

<Button PreviewMouseLeftButtonUp="Button_PreviewMouseLeftButtonUp">
    <Button.Template>
        <ControlTemplate>
            <StackPanel>
                <Image Source="..." />
            </StackPanel>
        </ControlTemplate>
    </Button.Template>
</Button>
Run Code Online (Sandbox Code Playgroud)

你的Button模板只有一个Image,我猜你不需要这个Button,你可以像上面那样使用,这样你就可以捕获MouseLeftUp事件。

<Image MouseLeftButtonUp="Image_MouseLeftButtonUp" Source="..." />
Run Code Online (Sandbox Code Playgroud)

这种方式要容易得多,但这取决于您的需要。

顺便说一句,抱歉我的英语很糟糕,我希望它能帮助你。