SL 4 - принудительная перерисовка визуального дерева - PullRequest
7 голосов
/ 31 августа 2010

Наше приложение имеет несколько объектов на холсте;холст содержится в просмотрщике прокрутки.У нас также есть элемент управления ползунком и некоторые кнопки, которые всегда располагаются по центру вверху окна.
Я пытаюсь распечатать приложение, захватив растровое изображение приложения, но без каких-либо «украшений» - ползунка, кнопок илиполосы прокрутки.

        _scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
        _scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
        var s = xSlider;
        s.Visibility = Visibility.Collapsed;
        var b = xPlusButton;
        b.Visibility = Visibility.Collapsed;
        b = xMinusButton;
        b.Visibility = Visibility.Collapsed;

        b = xButton;
        b.Visibility = Visibility.Collapsed;

Ползунок и кнопки скрыты, как и ожидалось, но полосы прокрутки - нет.
Я подозреваю, что приложению необходимо перерисовать макет, чтобы скрыть полосы прокрутки.Есть ли способ сделать это?Это усложняется тем фактом, что операция печати в SL 4 должна инициироваться жестом пользовательского интерфейса;(AFAIK) нет способа инициировать программно, поэтому такая перерисовка должна происходить в одном из обработчиков событий PrintDocument.

Спасибо за любые предложения ....

Ответы [ 2 ]

7 голосов
/ 30 июня 2011

Попробуйте следующее,

canvas.InvalidateMeasure();
canvas.InvalidateArrange();

Вы также можете использовать WritableBitmap для захвата изображения во время выполнения и отправки изображения на печать документа, если в случае печати документа игнорируется преобразование рендеринга.

Также, если вы используете WritableBitmap для захвата элемента, вы должны указать RenderTransform в качестве второго аргумента.Можете ли вы опубликовать свой код для захвата экрана?

2 голосов
/ 01 июля 2011

В дополнение к методам InvalidateMeasure и InvalidateArrange, предложенным Akash, вы можете попробовать метод UpdateLayout .

Два недействительных метода помечают меру элемента управления или располагаются как необходимыебудет выполнен снова, но не обязательно сделает это немедленно.UpdateLayout заставит его немедленно выполнить некоторые обновления.

Это что-то вроде черного ящика, поэтому вам может потребоваться сделать недействительным, а затем вызвать UpdateLayout.Иногда вам может просто понадобиться вызвать UpdateLayout.

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