我想在导航回来时恢复滚动位置,我找到a C# code并试图转换为Visual Basic,目前给了我很多错误。
C#代码:
void ItemsPage_Loaded(object sender, RoutedEventArgs e)
{
this.gridScrollViewer = FindVisualChild<ScrollViewer>(this.itemGridView);
this.gridScrollViewer.ScrollToHorizontalOffset(App.ScrollOffset);
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
App.ScrollOffset = gridScrollViewer.HorizontalOffset;
base.OnNavigatedFrom(e);
}
我转换的VB代码:
Private Sub ItemsPage_Loaded(sender As Object, e As RoutedEventArgs)
Me.gridScrollViewer = FindVisualChild(Of ScrollViewer)(Me.itemGridView)
Me.gridScrollViewer.ScrollToHorizontalOffset(App.ScrollOffset)
End Sub
Protected Overrides Sub OnNavigatedFrom(e As NavigationEventArgs)
App.ScrollOffset = gridScrollViewer.HorizontalOffset
MyBase.OnNavigatedFrom(e)
End Sub
错误:
答案 0 :(得分:0)
FindVisualChild<ScrollViewer>()
你可以用这种方式实现(你可以将它重写为VB.Net,我没有太多时间重写它)。
public static T GetVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
DependencyObject v = VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
child = GetVisualChild<T>(v);
if (child != null)
break;
}
return child;
}
然后你可以按照你写的那样调用它:
var gridScrollViewer = (ScrollViewer)Helpers.GetVisualChild<ScrollViewer>(this.itemGridView);
if (gridScrollViewer != null)
{
gridScrollViewer.ChangeView(App.ScrollOffset, null, null, true);
//this is not supported in next windows releases after Win8.1
//Windows.UI.Xaml.Controls.ScrollViewer.ScrollToHorizontalOffset(double)' is obsolete: 'ScrollToHorizontalOffset may be altered or unavailable for releases after Windows 8.1. Instead, use ChangeView.
// gridScrollViewer.ScrollToHorizontalOffset(App.ScrollOffset);
}
要按名称访问您的网格,您必须在xaml中为网格添加名称。
<GridView
x:Name="itemGridView"
我希望它会有所帮助。
答案 1 :(得分:0)
VB变体实现:
Public Shared Function GetVisualChild(Of T As DependencyObject)(ByVal parent As DependencyObject) As T
Dim visualChild As T = Nothing
Dim childrenCount As Int32 = VisualTreeHelper.GetChildrenCount(parent)
Dim num As Int32 = 0
While num < childrenCount
Dim child As DependencyObject = VisualTreeHelper.GetChild(parent, num)
visualChild = DirectCast((TryCast(child, T)), T)
If (visualChild Is Nothing) Then
visualChild = Helpers.GetVisualChild(Of T)(child)
End If
If (visualChild Is Nothing) Then
num = num + 1
Else
Exit While
End If
End While
Return visualChild
End Function