【UWP】如何获取ListView/GridView控件内置ScrollViewer对象

UWP项目需要在用户滚动ListView时做出响应,实时调节某些控件的属性.

观察ListView默认的Template, XAML代码如下:

<ControlTemplate TargetType="ListView">
	<Border Background="{TemplateBinding Background}"
			BorderThickness="{TemplateBinding BorderThickness}"
			BorderBrush="{TemplateBinding BorderBrush}"
			CornerRadius="{TemplateBinding CornerRadius}">
		<ScrollViewer x:Name="ScrollViewer"
					  AutomationProperties.AccessibilityView="Raw"
					  BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}"
					  HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
					  HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
					  IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
					  IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}"
					  IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
					  IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
					  IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}"
					  TabNavigation="{TemplateBinding TabNavigation}"
					  VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
					  VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
					  ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
			<ItemsPresenter Footer="{TemplateBinding Footer}"
							FooterTransitions="{TemplateBinding FooterTransitions}"
							FooterTemplate="{TemplateBinding FooterTemplate}"
							Header="{TemplateBinding Header}"
							HeaderTransitions="{TemplateBinding HeaderTransitions}"
							HeaderTemplate="{TemplateBinding HeaderTemplate}"
							Padding="{TemplateBinding Padding}"/>
		</ScrollViewer>
	</Border>
</ControlTemplate>

容易看出ListView内仅包含一个Border,其中嵌套了一个ScrollViewer.

因此可定义一个 ScrollViewer 变量 ListScrollViewer, 在ListView加载完成后调用VisualTreeHelper提供的GetChild方法获取这个ScrollViewer.

ListScrollViewer = (VisualTreeHelper.GetChild(/*ListView控件*/, 0) as Border).Child as ScrollViewer;

推荐在ListView的Loaded事件中调用此方法, 若在其他地方调用, 最好先用VisualTreeHelper.GetChildenrCount() 确认ListView已加载.

此后即可添加对ScrollViewer.ViewChanged等事件的响应, 或是直接调用ScrollViewer的方法, 极其方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

brandonw3612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值