Как сказано в документации , свойства Offset
устанавливают положение относительно окна приложения:
Получает или задает расстояние между левой стороной окна приложения.и левая сторона всплывающего окна.
Это означает, что позиция установлена абсолютно относительно окна и не будет обновляться автоматически при прокрутке GridView
.Вместо этого вам придется обновить его вручную, наблюдая за событиями просмотра прокрутки.Сначала используйте VisualTreeHelper
, чтобы найти ScrollView
внутри GridView
:
public static ScrollViewer FindScrollViewer(DependencyObject d)
{
if (d is ScrollViewer) return d as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)
{
var child = VisualTreeHelper.GetChild(d, i);
var result = FindScrollViewer(child);
if (result != null) return result;
}
return null;
}
Вы можете использовать этот вспомогательный метод следующим образом:
var scrollViewer = FindScrollViewer(MyGridView);
А теперь присоедините scrollViewer.ViewChanged
или scrollViewer.ViewChanging
событие и обновите позицию всплывающего окна, как вы считаете нужным.