我有一个非常简单的应用程序,但它提出了一个问题。我有一个按钮(在网格上),我想知道,当用户在运行时点击它时,用户点击的按钮(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";
}
如果我只保留click事件处理程序,它就可以了。如果我只保留MouseLeftButtonDown事件处理程序,则它不起作用。如果我保留两者,那么只调用Click事件处理程序!有人可以帮忙吗?
提前致谢。
答案 0 :(得分:0)
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)
{
}
}