Размер WPF Viewbox изменяется, но PointToScreen дочернего элемента всегда одинаков - PullRequest
1 голос
/ 17 июня 2010

Для обработки нескольких разрешений у меня есть следующие элементы управления на одной странице 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

1 Ответ

0 голосов
/ 17 июня 2010

Я боролся с этим уже пару дней ... но нашел решение через 10 минут после публикации вопроса ...

ОТВЕТ:

После изменения ширины и макс.Ширина Viewbox Мне нужно вызвать UpdateLayout ()

Теперь это работает!

p.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...