如何拥有照片查看器风格的页面?我不知道我命名是否正确,但我有一个显示一排图片的应用程序。如果用户向左滑动,上一张图像将全屏显示,如果用户向右滑动,下一张图像将全屏显示,两者的行为与在照片应用程序或PDF阅读器中查看图像完全一样。我以为我可以操纵全景控件来适应这个,但我无法让图片全屏显示,标题在顶部。我怎样才能做到这一点?有小费吗?注意:这个stackoverflow上的策略很烦人。某些类型的人可以投票关闭,或者说一些句子片段:你尝试了什么或者你的代码在哪里。从基础上关闭这个问题以获得良好的感觉。这是关于给指南一种查看它的方法。如果不确定如何执行它,我应该显示什么代码?不管怎样,我找到了答案,没有必要这样做。我会告诉你我做了什么,也许你会觉得够了。我想要一个全屏图像查看器,让我滑动到下一个(或上一个)图像,但它会捕捉到图像而不是正常滚动。我使用了一个禁用了内部scrollViewer的全屏ListBox(请参阅XAML),然后使用了一些额外的依赖属性来获取内部scrollViewer的水平(和垂直)偏移量的属性(这样我就可以自己制作滚动动画)。我的实现更加复杂,因为我想缩放(然后平移)图像,但是转到下一张图像的部分并不难。免责声明:我从StackOverflow和其他网站的多个来源获得代码。我不记得我从哪里得到它们的,但我自己并没有想出这些想法。如果我知道在哪里给它,我会非常乐意给予信任。首先,创建一个名为ScrollViewerEx的新类:usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;使用System.Windows;使用System.Windows.Controls;namespaceImageViewer{publicclassScrollViewerEx{publicstaticdoubleGetHOffset(ScrollViewerobj){return(double)obj.GetValue(ScrollViewer.Horizo??ntalOffsetProperty);}publicstaticvoidSetHOffset(ScrollViewerobj,doublevalue){obj.SetValue(HOffsetProperty,value);}//使用DependencyProperty作为HOffset的后备存储。这会启用动画、样式、绑定等...privatestaticvoidOnHOffsetChanged(DependencyObjectsender,DependencyPropertyChangedEventArgse){varscroll=senderasScrollViewer;滚动.滚动lToHorizo??ntalOffset((double)e.NewValue);}publicstaticdoubleGetVOffset(ScrollViewerobj){return(double)obj.GetValue(ScrollViewer.VerticalOffsetProperty);}publicstaticvoidSetVOffset(ScrollViewerobj,doublevalue){obj.SetValue(VOffsetProperty,value);}//使用DependencyProperty作为VOffset的后备存储。这会启用动画、样式、绑定等...privatestaticvoidOnVOffsetChanged(DependencyObjectsender,DependencyPropertyChangedEventArgse){varscroll=senderasScrollViewer;scroll.ScrollToVerticalOffset)}e(New}(是的,假设你有一个如下所示的列表框在我的例子中,Images属性是一个名为PictureModel的类,里面有一个ImageSource。我没有显示我的ItemTemplate,我只是放了一个Image在里面并将Source绑定到您的ImageSource。注意ListBox下面的Rectangle。我把我所有的触摸代码都放在那里,因为当我使用缩放图像时,我的坐标系正在改变。使用矩形覆盖让我可以为所有触摸设置标准屏幕坐标。你可能不需要这个。好的,另一个关键部分。确保将此信息放入页面的构造函数中。这允许您为滚动查看器偏移更改设置动画。Storyboard.SetTargetProperty(ScrollStoryboard.Children[0],newPropertyPath(ScrollViewerEx.HOffsetProperty));Storyboard.SetTargetProperty(ScrollStoryboard.Children[1],newPropertyPath(ScrollViewerEx.VOffsetProperty));获取对ListBox内滚动查看器的永久引用:privatevoidlistBox_Loaded_1(objectsender,RoutedEventArgse){scrollviewer=GetVisualChild(listBox);}最后,处理动作事件。动画列表框滚动的关键是操作完成事件。我没有使用垂直偏移,只使用水平偏移。变量vm.Position是scrollviewer.horizo??ntaloffset的计算位置。基本上,如果您在第5个图像上,请将屏幕宽度乘以4以获得水平偏移量。privatevoidRectangle_ManipulationCompleted_1(objectsender,ManipulationCompletedEventArgse){if(e.FinalVelocities.LinearVelocity.X>2000){if(ScrollStoryboard.GetCurrentState()!=ClockState.Stopped)ScrollStoryboard.Stop();//确保之前的故事运行AnimationH.SetValue(DoubleAnimation.FromProperty,scrollviewer.Horizo??ntalOffset);AnimationH.SetValue(DoubleAnimation.ToProperty,(double)vm.Position);Storyboard.SetTarget(ScrollStoryboard,scrollviewer);滚动故事板.开始();我希望这有帮助。正如我所说,除了您从ListBox获得的内置UI虚拟化之外,我完成的所有实现都包括数据虚拟化。那和缩放。它还没有完全准备好发布,但这将帮助您开始。以上就是C#学习教程:如何拥有图片浏览器风格的页面?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
