Я уже проверил Simulating a mousehover effect on a fontIcon in uwp. Но я столкнулся с другой, «мерцающей» проблемой.UWP - PointerEntered/PointerExited для имитации перемещения мыши на сетчатых рядах
У меня есть сетка внутри ScrollViewer, которая является дочерним элементом элемента управления PivotItem. Сетка пуста в начале и затем программно заполнена.
<PivotItem>
<ScrollViewer x:Name="MyScrollBar" >
<Grid Name="MyGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</ScrollViewer>
</PivotItem>
Затем столбцы заполняются 3 текстовыми блоками. Моя цель - показать вылет с дополнительными сведениями при наведении курсора на строку (не один TextBlock). Чтобы достичь этого, я определяю для каждой строки дополнительный прозрачный прямоугольник, ColumnSpan которого равен 3, и добавьте его в качестве последнего дочернего элемента каждой строки. то я даю ему выпадающей следующим образом:
Rectangle rect = new Rectangle();
rect.Opacity = 0;
rect.SetValue(Grid.RowProperty, r);
rect.SetValue(Grid.ColumnSpanProperty, 3);
Flyout fl = new Flyout();
Grid flGrid = new Grid();
TextBlock flTb1 = new TextBlock();
flTb1.Text = details.Name;
flGrid.Children.Add(flTb1);
fl.Content = flGrid;
rect.SetValue(FlyoutBase.AttachedFlyoutProperty, fl);
rect.PointerEntered += Rect_PointerEntered;
rect.PointerExited += Rect_PointerExited;
rect.Margin = new Thickness(2);
Здесь обработчики событий PointerEntered и PointerExited:
private void Rect_PointerEntered(object sender, PointerRoutedEventArgs e)
{
((Flyout)(((Rectangle)sender).GetValue(FlyoutBase.AttachedFlyoutProperty))).ShowAt((Rectangle)sender);
}
private void Rect_PointerExited(object sender, PointerRoutedEventArgs e)
{
((Flyout)(((Rectangle)sender).GetValue(FlyoutBase.AttachedFlyoutProperty))).Hide();
}
Как указатель попадает в хит зону строки сетки, вдруг Flyout появляется и исчезает , И так происходит всякий раз, когда указатель перемещается, даже по той же строке (я не хочу, чтобы вылет исчезли при перемещении указателя по той же строке). Результат - мерцающий всплывающий экран. Мне кажется, что события PointerEntered/PointerExited оба запускаются в любой точке, зависающей.
То, что я уже пробовал:
- Ручка PointerEntered только (я знаю, что это не лучшая практика, но я пробовал)
- Set PointerEntered.Handled ложь (я думал, что, может быть, другие элементы управления в сетке были воздействуя на поведении)
- обращаться с PointerMoved только
- хранятся «завис» и «зависание» Прямоугольник (ы) распознавать, когда указатель находится над тем же/другим рядом
- Множество других попыток, о которых я даже не помню, всегда получал одинаковые мерцающие результаты.
Может ли кто-нибудь указать мне правильное направление? Заранее спасибо!