Для обработки нескольких разрешений у меня есть следующие элементы управления на одной странице xaml.
- Сетка -> Окно просмотра (растяжение, по центру) -> Холст (по центру) -> Прямоугольник X (по центру)
- FrameworkElement
Я пытаюсь покрыть всю страницу черным наложением и вырезать прямоугольник для прямоугольника X в центре страницы.
Для создания черного наложения я закрашиваю всю страницу в черный цвет, а затем:
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
double sw = SystemParameters.PrimaryScreenWidth;
double sh = SystemParameters.PrimaryScreenHeight;
PathGeometry cmbg = null;
RectangleGeometry rectangleFullScreen = new RectangleGeometry(new Rect(0, 0, sw, sh));
cmbg = Geometry.Combine(Geometry.Empty, rectangleFullScreen, GeometryCombineMode.Union, null);
RectangleGeometry rectangleHole = new RectangleGeometry(holeRectangle);
cmbg = Geometry.Combine(cmbg, rectangleHole, GeometryCombineMode.Exclude, null);
Brush b = new SolidColorBrush(Colors.Black);
b.Opacity = 0.85;
dc.DrawGeometry(b, new Pen(), cmbg);
}
return dv;
Чтобы вычислить прямоугольник для исключения, я получаю экранные координаты RectangleX (.PointToScreen (new Point (0, 0));)
И проблема в том, что если я изменяю размер окна просмотра (в зависимости от разрешения), RectangleX меняет свое местоположение, но PointToScreen всегда возвращает ту же координату экрана.
Не изменяя окно просмотра, отверстие вырезано в нужном месте, чуть выше RectangleX.
Как я могу получить правильную координату RectangleX, чтобы нарисовать прямоугольник исключения?
Буду очень признателен за вашу помощь.
Спасибо
Peter