Событие PivotItem Loaded срабатывает дважды

Windows Phone 8, Silverlight. У меня есть PivotItem, который объявлен на моей странице XAML под ResourceDictionary страницы, потому что я не хочу, чтобы он отображался изначально, и нет динамической видимости для PivotItems. Когда приходит время, я беру объект, удаляю его из ресурсов и добавляю в Pivot. Это работает, но событие Load по какой-то причине запускается дважды - один раз при загрузке страницы и один раз, когда я вставляю его в Pivot.

Я бы предпочел, чтобы моя обработка OnLoaded выполнялась только один раз.

Это по дизайну? Есть ли обходной путь? Есть ли подобное событие, которое запускается один раз при инициализации объекта (кроме конструктора)?

Я могу обойти это, введя логический флаг init-once, но все же.


person Seva Alekseyev    schedule 08.11.2012    source источник


Ответы (2)


Вы можете попробовать OnNavigatedTo. Загруженное событие может запускаться практически для любого элемента в визуальном дереве. Если вы хотите свернуть элементы в pivotItem, но не в самом pivotItem, подключитесь к родительскому контейнеру Grid.

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

myPivotControl.Items.Remove (элемент);

и вы можете добавить элемент обратно таким же образом

myPivotControl.Items.Add(элемент)

Однако я подозреваю, что вы получите лучшие результаты, используя другое событие. Родительский свод имеет событие для добавления и удаления элементов. Эта ссылка приведет вас к документации по классу Pivot. Кроме того, эта ссылка приведет вас к классу PivotItem.

person Lance McCarthy    schedule 09.11.2012
comment
Удаление элемента при запуске для повторного добавления позже может быть ответом, который я ищу. Примет это, это работает. - person Seva Alekseyev; 10.11.2012
comment
Извините, Loaded по-прежнему срабатывает дважды. Кроме того, удаление элемента из сводки при запуске приводит к тому, что он ненадолго мерцает на экране, что довольно неприятно. - person Seva Alekseyev; 14.11.2012

Вы можете сделать PivotItem свернутым в начале, а затем сделать его видимым, когда вам это нужно.

person Paras Wadehra    schedule 08.11.2012
comment
Будет ли заголовок элемента сводки отображаться в верхней части элемента управления сводки вместе с остальными элементами? Я не за этим... - person Seva Alekseyev; 09.11.2012
comment
Нет, если вы сделаете элемент свернутым, он в основном будет скрыт от просмотра и не будет отображаться в элементе управления Pivot. - person Paras Wadehra; 09.11.2012
comment
Так как же сделать элемент свернутым? Если вы установите для параметра «Видимость» значение «Свернутый», заголовок элемента все еще будет там, к нему можно будет перейти одним касанием, но он будет пустым. Очень раздражает. - person Seva Alekseyev; 09.11.2012
comment
Дайте каждому сводному элементу x:Name. Это разрушит все дерево в PivotItem. Также вы можете использовать этот прием: NameOfPivotControl.Items.Remove(NameOfPivotControl.Items.Single(p =› ((PivotItem)p).Name == NameOfPivotItem)); - person Lance McCarthy; 15.11.2012