Как вы можете захватить события указателя UWP на всплывающих окон / всплывающих подсказок / TeachingTip - PullRequest
0 голосов
/ 23 января 2020

Я использую TeachingTip UWP, и мне нужно знать, когда указатель находится над элементом управления.

Вот как я создаю и вставляю подсказку Teaching:

var teachingTip = new TeachingTip
{
   IsOpen = true,
   Title = "hello",
   Subtitle = "world"
};

var mainPage = (Window.Current.Content as Frame)?.Content as MainPage;
var content = (Windows.UI.Xaml.Controls.Canvas)mainPage.Content;
content.Children.Add(teachingTip);

Я попробовал это, но не получил никакого события:

teachingTip.PointerEntered += TipPointerEntered;
teachingTip.PointerExited += TipPointerExited;
...

Я также попробовал это, но это не имело никакого значения:

teachingTip.AddHandler(UIElement.PointerEnteredEvent, new PointerEventHandler(TipPointerEntered), true);

Тогда я прочитал here this:

Если вы хотите обрабатывать перенаправленные события из всплывающего окна или всплывающей подсказки, поместите обработчики в указанные c элементы пользовательского интерфейса>, которые находятся внутри всплывающего окна или всплывающей подсказки, а не Сами элементы всплывающих окон или всплывающих подсказок.

Так что я думаю, что TeachingTip ведет себя так же. Но я не мог понять, как получить доступ к дочерним элементам TeachingTip.

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

var mainPage = (Window.Current.Content as Frame)?.Content as MainPage;
mainPage.AddHandler(UIElement.PointerMovedEvent, new PointerEventHandler(PointerMoved), true);  

void PointerMoved(object sender, PointerRoutedEventArgs e)
{
   var page = (Window.Current.Content as Frame)?.Content as MainPage;
   var currPoint = e.GetCurrentPoint(page);
   var elements = VisualTreeHelper.FindElementsInHostCoordinates(new Windows.Foundation.Point(currPoint.Position.X, currPoint.Position.Y), teachingTip);
   foreach (UIElement element in elements)
   {
      // Eureka! found an element 
   }
}

но нет эврика ... если кто-то может помочь ...

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