Как получить положение мыши на экране в WPF?
он работает в определенном элементе управления, но не работает с конкретным элементом управления.
как получить положение мыши и использовать события мыши независимо от любого управления непосредственно с экрана (без вызова платформы)?
2 очков:
- события мыши, когда мышь находится не в элементе управления, а на экране.
 - положение мыши, когда мышь находится не в элементе управления, а на экран.
 
он должен быть решен без использования вызова платформы.
следующие два не работают:
System.Windows.Input.Mouse.GetPosition(this)
не получить позицию мыши конкретный контроль.
System.Windows.Forms.Cursor.Position.X
System.Windows.Forms.Cursor.Position не работает, потому что у него нет типов в приложении WPF, но он работает в приложении Windows Forms.
IntelliSense получает систему.Окна.Формы.Указатель.Позиция, но она не получает никакого типа позиции, поэтому я не могу получить:
Position.X    
Position.Y
и
Point pointToWindow = Mouse.GetPosition(this);
Point pointToScreen = PointToScreen(pointToWindow);
не получить позицию мыши конкретный контроль.
3 ответов
используя MouseDown событие элемента управления, вы можете попробовать это:
var point = e.GetPosition(this.YourControl);
EDIT:
Вы можете захватить событие мыши для конкретного элемента управления с помощью Mouse.Capture(YourControl); таким образом, он будет захватывать события мыши, даже если он не находится на этом элементе управления. Вот это ссылке
можно использовать PointToScreen
преобразует точку, представляющую текущую систему координат Визуальный в точку в координатах экрана.
что-то вроде этого:
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 возвращает точку, и PointToScreen преобразует точку в координату экрана
EDIT:
можно использовать Mouse.Capture(SepcificControl);. От MSDN
захватывает ввод мыши в указанный элемент.
у меня мало нового нашел,
код ниже, fisrt построить и запустить окно,
затем просто колесо мыши один раз на окне, чтобы вызвать бесконечный экран обнаружения позиции мыши.
(таким образом, я не нашел способ обнаружить событие мыши из-под контроля во второй точке вопроса, но аналогично использовать бесконечный поток.)
но я просто использую небольшой навык для включения Windows.Формы в проекте WPF, просто используйте формы код в чистом методе, затем обратитесь к этому методу в блоке кода события.
.
вот код:
добавить две ссылки на проект:
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();
        }
    }