C# 返回Visual Basic时如何恢复GridView的滚动位置
我想在返回导航时恢复滚动位置,我发现并尝试将其转换为Visual Basic,目前给了我很多错误 C#代码: 错误: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 {
几个月前我也有类似的问题。您的方法:
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