Есть ли элемент управления SurfacePopup в Surface 2? - PullRequest
2 голосов
/ 21 марта 2012

Последние несколько месяцев мы работали над приложением, предназначенным для планшетных ПК с Windows 7.Таким образом, мы использовали Surface 2 SDK для большинства элементов управления, и он полностью радует от прикосновения.

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

Я обнаружил, что в первом Surface SDK был SurfacePopup, но я не могу найти его в Surface 2SDK.Они избавились от этого?Есть ли подход «наилучшей практики»?

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

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

this.EnableSurfaceInput();

.. но я получаю исключение NullReferenceException для System.Windows.Input.Mouse.get_LeftButton(), которое странным образом предполагает, что он может включать поверхностные входы для элементов управления только при подключенной мыши.

Есть идеи?Все они будут встречены с распростертыми объятиями!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2014

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

Насколько я помню, ответом было использование слоя с надписью вместо всплывающего окна. По сути, у каждого элемента управления WPF есть уровень рекламного элемента, который находится над стеком пользовательского интерфейса элемента управления. По умолчанию он ничего не содержит, но вы можете добавить к нему все, что захотите.

Я все это заработал, написав собственный элемент управления, который позволяет вам поместить этот элемент управления с содержимым в XAML, а затем отображать и скрывать его всякий раз, когда вам это нужно. Когда он отображается, он перемещает свое содержимое в слой adorner содержащего окна, а когда он скрыт, он перемещает содержимое обратно в сам элемент управления, который скрыт от пользователя.

Боюсь, я не могу вдаваться в подробности, но насколько я помню, это было окончательное решение; замена всплывающих окон (которые никогда не очень хорошо работали) на пользовательский элемент управления, который использует слой adorner.

Надеюсь, это поможет!

0 голосов
/ 24 февраля 2014

В Surface SDK 2.0 нет SurfacePopup, однако вы можете использовать обычное всплывающее окно WPF.Затем вам нужно убедиться, что он получает сенсорные события, используя метод расширения, который вы предложили выше во всплывающем окне, а не в окне :

((HwndSource)HwndSource.FromVisual(popup)).EnableSurfaceInput();

Редактировать:Как я только что узнал, это работает только тогда, когда всплывающее окно изначально открыто.Чтобы заставить его работать, когда всплывающее окно открывается позже, вам не нужно использовать всплывающее окно, но родительский элемент его дочернего элемента (см. этот вопрос ).

...