Переключение видимости PanoramaItem через делегат - PullRequest
1 голос
/ 17 сентября 2011

У меня есть особая проблема в разработке Windows Phone. У меня есть 4 панорамы, каждый из которых содержит элемент управления webBrowser. При запуске приложения у меня виден только первый элемент панорамы, пока восстановление находится в свернутом состоянии.

На основе взаимодействия в первом веб-браузере мы уведомляем приложение WP7 (событие webBrowser.ScriptNotify) и решаем, какие панорамы отображать. Видимость задается в делегате, который обрабатывает событие ScriptNotify.

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я установил видимость в делегате на Visible, он не отображается в Панораме. Я пытался использовать Dispatcher в делегате, чтобы изменить видимость, но это не помогло:

Deployment.Current.Dispatcher.BeginInvoke(() => { 
    discussions.Visibility = System.Windows.Visibility.Visible; 
});

Может кто-нибудь подсказать, что я мог делать неправильно?

Ответы [ 4 ]

0 голосов
/ 30 июня 2012

В основном, панорама содержит внутренний список видимых элементов. Этот список не обновляется, когда вы устанавливаете элемент видимым. Самый простой способ заставить элемент управления обновить этот список - установить свойство MainItem. Поэтому после настройки видимости вашего элемента панорамы просто добавьте следующую строку:

yourPanorama.DefaultItem = yourPanorama.DefaultItem;

(учитывая, что панорама называется yourPanorama)

0 голосов
/ 20 сентября 2011

Я не знаю о производительности, но я уверен, что PanoramaItem имеет свернуто * видимость * состояние, я пытался переключить его из кода, и он работает как шарм если начальное состояние видимое .

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

Может быть, это ошибка или я не знаю, но это немного неловко.

К добавить PanoramaItem к Панораме может работать.

0 голосов
/ 11 января 2012

Я прошу прощения за то, что не отвечаю на вопрос, но наоборот, навязываю проблему :).

У меня такая же проблема, один PanoramaItem с ItemsControl, привязанный к коллекции ViewModel.Свойство видимости PanoramaItem привязано к базе данных {Binding}, и используется конвертер CollectionToVisibility.Во время отладки с установленной точкой прерывания внутри кода конвертера мне удалось убедиться, что возвращаемое значение в порядке, но PanoramaItem не виден, когда в коллекциях есть элементы.

В ходе моего расследования я понял, что на самом деле, когда первыйВозвращение к коллекции происходит, когда возвращаемое значение равно нулю, поскольку данные коллекции поступают из асинхронного вызова службы, а возвращаемое значение преобразователя - Visibility.Collapsed, и только когда заполнено собрание и возбуждено событие PropertyChanged, второе значение получаетсвойство Collection запускает обновление привязки данных, и возвращаемое значение конвертера теперь Visibility. Видимо, это заставляет меня думать, что PanoramaItem не включается в дерево элементов управления Panorama во время применения шаблона, поскольку видимость установлена ​​как свернутая, и послечто пользовательский интерфейс никогда не загружает PanoramaItem снова.

Я сделал тест, чтобы проверить этот сценарий, возвращая в свойстве get свойства Collection жестко закодированный список элементов, так что fВ первом get есть элементы, и конвертер возвращает Visible в первом запросе get. Все работает как талисман. Я могу даже вычеркнуть коллекцию из элементов, и она будет свернута и наоборот.

Все эточистый Xaml, без кода.Цель этого состоит в том, чтобы скрыть PanoramaItems, которые по какой-то причине не имеют контента для показа.

0 голосов
/ 17 сентября 2011

Прежде всего, вы не должны использовать элемент управления WebBrowser внутри Panorama.Это очень плохая производительность.

Во-вторых, у Panorama и PivotItems нет свернутого состояния.

И в-третьих, диспетчер не имеет к этому никакого отношения (если только вы не запускаете код в потоке пользовательского интерфейса).

Итак, вам нужно сделать динамически добавьте PanoramaItems к элементу управления Panorama.Это можно сделать привязкой данных (рекомендуется) или непосредственно из C #.

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