它在特定控件中工作,但它不能解决特定控件。
如何直接从屏幕上获取鼠标位置并独立于任何控件使用鼠标事件(没有平台调用)?
需要点2:
应该在不使用平台调用的情况下解决。
接下来两个人不能工作:
System.Windows.Input.Mouse.GetPosition(this)
没有让鼠标定位出特定的控件。
System.Windows.Forms.Cursor.Position.X
System.Windows.Forms.Cursor.Position
无法正常工作,因为它在WPF应用中没有类型,但可以在Windows窗体应用中使用。
IntelliSense获取System.Windows.Forms.Cursor.Position,但它没有获得任何类型的位置,因此我无法获得:
Position.X
Position.Y
和
Point pointToWindow = Mouse.GetPosition(this);
Point pointToScreen = PointToScreen(pointToWindow);
没有让鼠标定位出特定的控件。
答案 0 :(得分:12)
使用控件的MouseDown
事件,您可以尝试:
var point = e.GetPosition(this.YourControl);
修改强>
您可以使用Mouse.Capture(YourControl);
将鼠标事件捕获到特定控件,这样即使它不在该控件上也会捕获鼠标事件。这是link
答案 1 :(得分:8)
您可以使用PointToScreen
转换表示当前坐标系的Point 可视化为屏幕坐标中的一个点。
这样的事情:
private void MouseCordinateMethod(object sender, MouseEventArgs e)
{
var relativePosition = e.GetPosition(this);
var point= PointToScreen(relativePosition);
_x.HorizontalOffset = point.X;
_x.VerticalOffset = point.Y;
}
请注意Mouse.GetPosition
返回一个Point,PointToScreen
将该点转换为屏幕坐标
修改强>
您可以使用Mouse.Capture(SepcificControl);
。来自MSDN
将鼠标输入捕获到指定的元素。
答案 2 :(得分:0)
我找不到新鲜事,
代码在下面,fisrt构建并运行Window,
然后只需在窗口上旋转鼠标一次,即可调用鼠标位置的无限屏幕检测。
(因此,在问题的第二点,我没有找到从控件中检测鼠标事件的方法,但类似地使用无穷无尽的线程。)
但我只是使用一点技巧在WPF项目中启用Windows.Forms,只需在纯方法中使用Forms代码,然后在事件代码块中引用该方法。
以下是代码:
添加两个对项目的引用:
System.Drawing
System.Windows.Forms
Xaml部分:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:g="clr-namespace:Gma.UserActivityMonitor;assembly=Gma.UserActivityMonitor"
Title="MainWindow" Height="350" Width="525"
MouseWheel="MainWindow_OnMouseWheel">
<Grid>
<TextBlock Name="TBK" />
</Grid>
</Window>
班级代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void KeepReportMousePos()
{
//Endless Report Mouse position
Task.Factory.StartNew(() =>
{
while(true){
this.Dispatcher.Invoke(
DispatcherPriority.SystemIdle,
new Action(() =>
{
GetCursorPos();
}));
}
});
}
public void GetCursorPos()
{
//get the mouse position and show on the TextBlock
System.Drawing.Point p = System.Windows.Forms.Cursor.Position;
TBK.Text = p.X + " " + p.Y;
}
private void MainWindow_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
//invoke mouse position detect when wheel the mouse
KeepReportMousePos();
}
}
答案 3 :(得分:0)
为什么使事情复杂化?只需传递console.log(errorResponse.error.errors[0].message);
即可获取屏幕坐标:
null