gpt4 book ai didi

c# - Wpf 应用程序未正确响应事件

转载 作者:行者123 更新时间:2023-11-30 18:31:09 27 4
gpt4 key购买 nike

我有一个非常简单的应用程序,但它给出了一个问题。我有一个按钮(在网格上),我想知道,当用户在运行时单击它时,用户单击了按钮的哪一部分(X,Y 坐标)。现在,我无法在 Click 事件处理程序中跟踪鼠标位置,因为它的参数“e”属于“RoutedEventArgs”类型,并且它没有给出发生鼠标单击的点的位置。

因此我尝试了另一个事件处理程序,即“MouseLeftButtonDown”事件。它有一个参数“e”,它提供了一个可以给出鼠标光标位置的 GetPosition() 方法。但问题是,在运行时,当我单击按钮时,根本不会调用此事件处理程序!这是我的两个事件处理程序的代码:

    private void button1_Click(object sender, RoutedEventArgs e)
{
string sName = sender.GetType().Name;
string sSrc = e.Source.ToString();
string soSrc = e.OriginalSource.ToString();

MessageBox.Show("Sender Name: " + sName + ",\nSource: " + sSrc + ",\nOrigSource: " + soSrc + ",\nevent:" + e.RoutedEvent.ToString());
}

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
string sName = sender.GetType().Name;
string sSrc = e.Source.ToString();
string soSrc = e.OriginalSource.ToString();
textBox1.Text = "LeftButtonPressed on button1";
}

如果我只保留单击事件处理程序,它就可以工作。如果我只保留 MouseLeftButtonDown 事件处理程序,它就不起作用。如果我保留两者,则只会调用 Click 事件处理程序!有人可以帮忙吗??

提前致谢。

最佳答案

Button 控件吞没(标记为“已处理”)MouseLeftButtonDown 事件作为其 Click 事件的一部分。可以添加一个即使在事件已被处理时也会触发的监听器,您可以这样做:

button1.AddHandler(Button.MouseLeftButtonDownEvent, 
new MouseButtonEventHandler(button1_MouseLeftButtonDown),
true // also capture handled events
);

或者,您可以子类化 Button并覆盖它的 OnMouseLeftButtonDown 事件:

public class ExtendedButton : Button
{
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{

}
}

关于c# - Wpf 应用程序未正确响应事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com