C# 返回Visual Basic时如何恢复GridView的滚动位置

C# 返回Visual Basic时如何恢复GridView的滚动位置,c#,vb.net,gridview,windows-store-apps,C#,Vb.net,Gridview,Windows Store Apps,我想在返回导航时恢复滚动位置,我发现并尝试将其转换为Visual Basic,目前给了我很多错误 C#代码: 错误: 几个月前我也有类似的问题。您的方法: FindVisualChild<ScrollViewer>() FindVisualChild() 您可以通过这种方式实现(您可以将其重写到VB.Net,我没有太多时间来重写它) public static T GetVisualChild(DependencyObject父对象),其中T:DependencyObject {

我想在返回导航时恢复滚动位置,我发现并尝试将其转换为Visual Basic,目前给了我很多错误

C#代码:

错误:


几个月前我也有类似的问题。您的方法:

FindVisualChild<ScrollViewer>()
FindVisualChild()
您可以通过这种方式实现(您可以将其重写到VB.Net,我没有太多时间来重写它)

public static T GetVisualChild(DependencyObject父对象),其中T:DependencyObject
{
T child=默认值(T);
int numVisuals=VisualTreeHelper.GetChildrenCount(父级);
对于(int i=0;i
然后你可以像你写的那样叫它:

 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);
}
var gridScrollViewer=(ScrollViewer)Helpers.GetVisualChild(this.itemGridView);
if(gridScrollViewer!=null)
{
gridScrollViewer.ChangeView(App.ScrollOffset,null,null,true);
//Win8.1之后的下一个windows版本不支持此操作
//Windows.UI.Xaml.Controls.ScrollViewer.ScrollToHorizontalOffset(double)”已过时:“ScrollToHorizontalOffset可能会被更改或不适用于Windows 8.1之后的版本。请改用ChangeView。
//gridScrollViewer.ScrollToHorizontalOffset(应用程序ScrollOffset);
}
要按名称访问网格,必须在xaml中将名称添加到网格中

 <GridView
            x:Name="itemGridView"

实现的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
公共共享函数GetVisualChild(作为DependencyObject的T的)(作为DependencyObject的ByVal父对象)作为T
Dim visualChild作为T=无
Dim childrenCount As Int32=VisualTreeHelper.GetChildrenCount(父级)
Dim num作为Int32=0
而num
您是否将变量重命名为您的变量?您是否实现了FindVisualChild(…)
?我也看不到事件方法上的
句柄。@TyCobb+1。C#和VB.net声明事件的方式不同。看这个关于提高活动。我建议您通过从编辑器的下拉列表中选择事件来生成事件。不幸的是,我无法访问我的xaml gridview,因为它位于datatemplate中。如何实现
FindVisualChild(…)
FindVisualChild
已实现
 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);
}
 <GridView
            x:Name="itemGridView"
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