Документ WPF Documentviewer обновляется правильно только при вводе мыши

У меня довольно специфическая проблема с элементом управления documentviewer. Позволь мне объяснить:

У меня есть средство просмотра документов, которое по умолчанию находится в невидимой сетке, которая находится поверх моего представления данных. Когда я нажимаю определенную кнопку (сгенерировать отчет, привязанный к команде в моей модели просмотра), создается отчет и документ xps для средства просмотра документов (фиксированная страница и т. Д.), А сетка средства просмотра документов становится видимой. Все идет нормально. Странная вещь и корень моей проблемы в том, что все работает нормально и отображается должным образом при нажатии кнопки через сенсорный ввод на сенсорном экране.

Когда он нажимается с помощью мыши, команда запускается, средство просмотра документов показывает, НО документ показывает все испорчено. Таблицы в беспорядке, нестандартные элементы управления имеют неправильный размер и т. Д. Как только курсор перемещается в документ или щелкается область внутри средства просмотра документов, все выравнивается и отображается правильно.

Я подозревал разницу между касанием и щелчком относительно фокуса на элементе управления и пробовал различные способы ручного обновления макета, когда элемент управления становится видимым. Безуспешно.

Дополнительно: Мой документ XPS содержит макет с пользовательскими элементами управления и сетками, которые создаются при запуске команды generate-report. Что кажется интересным, так это то, что масштабирование пользовательского управления, похоже, не работает только тогда, когда на странице есть несколько элементов.

Изменить: изменения видимости вообще не влияют. Он ведет себя точно так же, когда средство просмотра документов отображается все время, а документ, к которому он привязан, обновляется.

Любая помощь или идеи приветствуются.


person Christian Hunziker    schedule 15.01.2015    source источник
comment
Легче ответить, если вы дадите нам код, который показывает вашу проблему.   -  person AndersNS    schedule 15.01.2015
comment
Довольно сложно решить, какой код показывать, когда проблема напрямую не связана с кодом. Документ просто отображается неправильно, когда кнопка нажата, но не нажата. Я предполагаю, что вопрос также может заключаться в том, какая, черт возьми, разница между нажатием и прикосновением к кнопке, привязанной к команде.   -  person Christian Hunziker    schedule 15.01.2015
comment
Как узнать, что проблема не в коде?   -  person Bob.    schedule 15.01.2015
comment
Потому что с момента касания / нажатия кнопки и выполнения команды нет абсолютно никакой разницы в коде, который выполняется, но результат не тот. Поэтому мой вопрос: события касания как-то отличаются от событий щелчка, чтобы объяснить, почему в одном случае документ отображается (вероятно, обновлен) правильно, а в другом - нет.   -  person Christian Hunziker    schedule 15.01.2015


Ответы (1)


После еще одной недели экспериментов я наконец нашел решение.

Все проблемы и непонятная магия макета были вызваны тем, что фиксированный документ, который должен был отображаться, был создан (и уже назначен средству просмотра документов), а ЗАТЕМ заполнен его содержимым рабочим потоком.

Содержимое было отображено, но макет обновлялся только при наведении курсора мыши, щелчке мышью или чем-то еще, когда средство просмотра документов получило какой-либо ввод. Я полагаю, что при вводе средство просмотра документов выполняет еще одно обновление назначенного документа.

Итак, мое решение в итоге было простым: создать фиксированный документ «незавершенной работы» при добавлении контента и назначить его для просмотра только после того, как все будет сделано.

Теперь остается только то, что контент и макет отображаются правильно, но иногда для реального отображения контента требуется 5-10 секунд. Но это просто проблема производительности из-за загрузки тяжелого документа. Я попытаюсь выяснить, смогу ли я встроить какое-то уведомление о загрузке, пока документ не загрузится полностью.

person Christian Hunziker    schedule 19.02.2015