
所以这是我的基本设置(来自内存的伪代码):
<phone.PivotItem> <ScrollVIEwer> <GrID Height="1500"> <GrID.RowDeFinitions> <!-- about 20 rows,all auto-height --> </GrID.RowDeFinitions> <border GrID.Row="0"> <TextBox x:name="txt1" /> </border> <border GrID.Row="1"> <TextBox x:name="txt2" /> </border> <!-- ...... --> <border GrID.Row="19"> <TextBox x:name="txt20" /> </border> </GrID> </ScrollVIEwer></phone.PivotItem>
你可以看到,我在PivotItem中有一个ScrollVIEwer,里面是一个GrID.在GrID中有大约20个TextBox,每个TextBox都在border中.当这个页面加载时,我动态地将焦点设置到这些TextBox之一,所以任何时候我将焦点设置为TextBox#6-20(粗略地) – 我必须手动向下滚动才能看到它.我想自动滚动我的ScrollVIEwer,以便无论哪个TextBox都有焦点,它都会居中以供用户查看.
ScrollToVerticalOffset()的documentation说:
Scrolls the content that is within the ScrollVIEwer to the specifIEd
vertical offset position.
并且它接受一种System.Double.
我不明白的是A)我应该通过的价值,以及B)我怎么能得到那个价值?它应该是介于0和我的网格高度(1500)之间的数字吗?如果是这样,我怎么能确定任何给定TextBox的位置,以便我可以滚动到它?
如果有任何简单的例子,请随时链接到他们.我不确定ScrollVIEwer中的内容在调用此方法时是否重要,但如果确实如此,我想要准确显示我是如何使用它的.
提前谢谢了!
解决方法 您可以使用UIElement.transformToVisual调用查看任何UIElement相对于另一个UIElement的位置.首先,获取TextBox和ScrollVIEwer之间的转换.
Generaltransform transform = textBox.transformToVisual(scrollVIEwer);
然后,找出TextBox相对于ScrollVIEwer的哪个点(0,0).意思是,TextBox原点(0,0)位于ScrollVIEwer的位置.
Point textBoxposition = transform.transform(new Point(0,0));
现在您已知道TextBox相对于ScrollVIEwer的Y位置,滚动到该Y偏移.
scrollVIEwer.ScrollToVerticalOffset(textBoxposition.Y);
祝好运!
总结以上是内存溢出为你收集整理的silverlight – 如何使用ScrollViewer.ScrollToVerticalOffset?全部内容,希望文章能够帮你解决silverlight – 如何使用ScrollViewer.ScrollToVerticalOffset?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)