У меня есть Datagrid, и я хочу знать положение ячейки данных для наложения ее на окно.
Он отлично работает только с одним монитором, но с несколькими мониторами окно смещено.
Вот код:
Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
myWindow.Top = point.Y;
myWindow.Left = point.X;
У кого-нибудь есть опыт позиционирования на нескольких мониторах?
EDIT:
Я сделал следующий тест:
public MyWindow()
{
...
this.LocationChanged += MyWindow_LocationChanged;
}
void MyWindow_LocationChanged(object sender, EventArgs e)
{
Console.WriteLine(this.Top + " <--> " + this.PointToScreen(new Point(0, 0)).Y);
}
Результаты:
- Один монитор: 0 <-> 30; 20 <-> 50; 100 <-> 130
==> Всегда разница 30 (может быть вызвана строкой заголовка)
- Двойной монитор: 0 <-> 30; 20 <-> 55; 100 <-> 153
==> При 0,0 разности 30. Но чем больше я сдвинул окно от 0,0. чем больше становится разница, но должна оставаться прежней. Очень странно!
EDIT2:
Вот мое решение, спасибо CodeNaked за подсказку:
Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
PresentationSource source = PresentationSource.FromVisual(this);
myWindow.Top = point.Y / source.CompositionTarget.TransformToDevice.M22;
myWindow.Left = point.X / source.CompositionTarget.TransformToDevice.M11;