原文:背水一战 Windows 10 (46) - 控件(ScrollViewer 基础): ScrollViewer, ScrollBar, ScrollContentPresenter

[源码下载]

背水一战 Windows 10 (46) - 控件(ScrollViewer 基础): ScrollViewer, ScrollBar, ScrollContentPresenter

作者:webabcd

介绍
背水一战 Windows 10 之 控件(ScrollViewer 基础)

  • ScrollViewer
  • ScrollBar
  • ScrollContentPresenter

示例
1、ScrollViewer 的基本应用
Controls/ScrollViewerDemo/ScrollViewerDemo.xaml

<Pagex:Class="Windows10.Controls.ScrollViewerDemo.ScrollViewerDemo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:Windows10.Controls.ScrollViewerDemo"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="10 0 10 10"><StackPanel Orientation="Horizontal" Margin="5"><!--ScrollViewer - 滚动视图控件Content - 滚动视图内的内容([ContentProperty(Name = "Content")])IsDeferredScrollingEnabled - 是否启用延迟滚动,在滚动内容过多时,启用延迟混动可以改善性能,默认值为 falseHorizontalScrollMode - 水平滚动模式Disabled - 禁用Enabled - 启用Auto - 同 EnabledVerticalScrollMode - 垂直滚动模式Disabled - 禁用Enabled - 启用Auto - 同 EnabledHorizontalScrollBarVisibility - 水平滚动条的可见性Auto - 自动。内容显示得下就隐藏滚动条,内容显示不下就显示滚动条Visible - 显示滚动条Hidden - 隐藏滚动条Disabled - 隐藏滚动条,并将 HorizontalScrollMode 强制设置为 DisabledVerticalScrollBarVisibility - 垂直滚动条的可见性Auto - 自动。内容显示得下就隐藏滚动条,内容显示不下就显示滚动条Visible - 显示滚动条Hidden - 隐藏滚动条Disabled - 隐藏滚动条,并将 VerticalScrollMode 强制设置为 DisabledViewChanging - 在视图即将发生变化(滚动或缩放等)时触发的事件ViewChanged - 在视图已经发生变化(滚动或缩放等)后触发的事件DirectManipulationStarted - 触摸环境下操作(滚动或缩放等)即将开始时触发的事件DirectManipulationCompleted - 触摸环境下操作(滚动或缩放等)已经完成后触发的事件--><ScrollViewer Name="scrollViewer" Width="400" Height="400" HorizontalAlignment="Left"IsDeferredScrollingEnabled="False"HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled"HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"ViewChanging="scrollViewer_ViewChanging"ViewChanged="scrollViewer_ViewChanged"DirectManipulationStarted="scrollViewer_DirectManipulationStarted"DirectManipulationCompleted="scrollViewer_DirectManipulationCompleted"><ScrollViewer.Content><Image Source="/Assets/StoreLogo.png" Width="1000" Margin="5" /></ScrollViewer.Content></ScrollViewer><!--ScrollViewer - 滚动视图控件TopHeader - 显示在上端的内容,垂直滚动时不动LeftHeader - 显示在左端的内容,水平滚动时不动TopLeftHeader - 显示在左上端的内容,垂直滚动和水平滚动时均不动注:如果要使用 TopHeader, LeftHeader, TopLeftHeader 则 ScrollViewer.Content 中的内容必须是 HorizontalAlignment="Left" VerticalAlignment="Top"--><ScrollViewer Width="400" Height="400" HorizontalAlignment="Left" Margin="20 0 0 0" HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled"HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"><ScrollViewer.Content><Image Source="/Assets/StoreLogo.png" Width="1000" Margin="5" HorizontalAlignment="Left" VerticalAlignment="Top" /></ScrollViewer.Content><ScrollViewer.TopHeader><TextBlock Text="TopHeader" /></ScrollViewer.TopHeader><ScrollViewer.LeftHeader><TextBlock Text="LeftHeader" /></ScrollViewer.LeftHeader><ScrollViewer.TopLeftHeader><TextBlock Text="TopLeftHeader" /></ScrollViewer.TopLeftHeader></ScrollViewer></StackPanel><!--使 ScrollViewer 里的内容滚动到相对于 ScrollViewer 居中的位置--><Button Name="btnChangeView" Content="居中" Margin="5" Click="btnChangeView_Click" /><TextBlock Name="lblMsg" Margin="5" /></StackPanel></Grid>
</Page>

Controls/ScrollViewerDemo/ScrollViewerDemo.xaml.cs

/** ScrollViewer - 滚动视图控件(继承自 ContentControl, 请参见 /Controls/BaseControl/ContentControlDemo/)*     ComputedHorizontalScrollBarVisibility - 当前水平滚动条的可见性(Visible, Collapsed)*     ComputedVerticalScrollBarVisibility - 当前垂直滚动条的可见性(Visible, Collapsed)*     ExtentWidth - ScrollViewer 内的内容的宽*     ExtentHeight - ScrollViewer 内的内容的高*     ViewportWidth - 可视区的宽*     ViewportHeight - 可视区的高*     HorizontalOffset - 滚动内容的水平方向的偏移量*     VerticalOffset - 滚动内容的垂直方向的偏移量*     ScrollableWidth - 水平滚动区域的大小(即 HorizontalOffset 的最大值,也就是 ExtentWidth - ViewportWidth)*     ScrollableHeight - 垂直滚动区域的大小(即 VerticalOffset 的最大值,也就是 ExtentHeight - ViewportHeight)*     *     bool ChangeView(double? horizontalOffset, double? verticalOffset, float? zoomFactor, bool disableAnimation) - 改变内容的显示*         用于取代如下这些已经弃用的方法 ScrollToHorizontalOffset(double offset), ScrollToVerticalOffset(double offset), ZoomToFactor(float factor)*         *     另外还有一堆对应的附加属性和静态方法,内嵌 ScrollViewer 的控件一般均支持,不再详述。简单示例可参见:/Controls/CollectionControl/ListViewBaseDemo/ListViewBaseDemo1.xaml* * * 本例用于演示 ScrollViewer 的基本用法*/using System;
using System.Diagnostics;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;namespace Windows10.Controls.ScrollViewerDemo
{public sealed partial class ScrollViewerDemo : Page{public ScrollViewerDemo(){this.InitializeComponent();}private void scrollViewer_ViewChanging(object sender, ScrollViewerViewChangingEventArgs e){Debug.WriteLine("scrollViewer_ViewChanging");}private void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e){Debug.WriteLine("scrollViewer_ViewChanged");lblMsg.Text = "ComputedHorizontalScrollBarVisibility: " + scrollViewer.ComputedHorizontalScrollBarVisibility;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ComputedVerticalScrollBarVisibility: " + scrollViewer.ComputedVerticalScrollBarVisibility;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ExtentWidth: " + scrollViewer.ExtentWidth;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ExtentHeight: " + scrollViewer.ExtentHeight;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ViewportWidth: " + scrollViewer.ViewportWidth;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ViewportHeight: " + scrollViewer.ViewportHeight;lblMsg.Text += Environment.NewLine;lblMsg.Text += "HorizontalOffset: " + scrollViewer.HorizontalOffset;lblMsg.Text += Environment.NewLine;lblMsg.Text += "VerticalOffset: " + scrollViewer.VerticalOffset;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ScrollableWidth: " + scrollViewer.ScrollableWidth;lblMsg.Text += Environment.NewLine;lblMsg.Text += "ScrollableHeight: " + scrollViewer.ScrollableHeight;lblMsg.Text += Environment.NewLine;// 在操作中返回 true, 操作结束返回 falselblMsg.Text += "ScrollViewerViewChangedEventArgs.IsIntermediate: " + e.IsIntermediate;}private void scrollViewer_DirectManipulationCompleted(object sender, object e){Debug.WriteLine("scrollViewer_DirectManipulationCompleted");}private void scrollViewer_DirectManipulationStarted(object sender, object e){Debug.WriteLine("scrollViewer_DirectManipulationStarted");}private void btnChangeView_Click(object sender, RoutedEventArgs e){scrollViewer.ChangeView(scrollViewer.ScrollableWidth / 2, scrollViewer.ScrollableHeight / 2, null, false);}}
}

2、ScrollBar 的示例
Controls/ScrollViewerDemo/ScrollBarDemo.xaml

<Pagex:Class="Windows10.Controls.ScrollViewerDemo.ScrollBarDemo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:Windows10.Controls.ScrollViewerDemo"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="10 0 10 10"><ScrollViewer Name="scrollViewer" Width="400" Height="200" Margin="5" HorizontalAlignment="Left"><Image Source="/Assets/StoreLogo.png" Width="1000" /></ScrollViewer><TextBlock Name="lblMsg" Margin="5" /></StackPanel></Grid>
</Page>

Controls/ScrollViewerDemo/ScrollBarDemo.xaml.cs

/** ScrollBar - 滚动条控件(继承自 RangeBase, 请参见 /Controls/ProgressControl/RangeBaseDemo.xaml)* * 本例通过访问 ScrollViewer 内的名为 VerticalScrollBar 的 ScrollBar 控件,来简要说明 ScrollBar 控件*/using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows10.Common;namespace Windows10.Controls.ScrollViewerDemo
{public sealed partial class ScrollBarDemo : Page{public ScrollBarDemo(){this.InitializeComponent();this.Loaded += ScrollBarDemo_Loaded;}private void ScrollBarDemo_Loaded(object sender, RoutedEventArgs e){// 找到 ScrollViewer 内的名为 VerticalScrollBar 的 ScrollBar 控件,即 ScrollViewer 内的垂直滚动条var scrollBar = Helper.GetVisualChild<ScrollBar>(scrollViewer, "VerticalScrollBar");// ValueChanged - 当滚动条的值发生改变是所触发的事件scrollBar.ValueChanged += scrollBar_ValueChanged;}void scrollBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e){// 显示垂直滚动条的当前值lblMsg.Text = e.NewValue.ToString();}}
}

3、ScrollContentPresenter 的示例
Controls/ScrollViewerDemo/ScrollContentPresenterDemo.xaml

<Pagex:Class="Windows10.Controls.ScrollViewerDemo.ScrollContentPresenterDemo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:Windows10.Controls.ScrollViewerDemo"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="10 0 10 10"><ScrollViewer Name="scrollViewer" Width="400" Height="400" Background="Blue" HorizontalAlignment="Left"HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled"HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"><ScrollViewer.Content><Image Source="/Assets/StoreLogo.png" Width="1000" /></ScrollViewer.Content></ScrollViewer></StackPanel></Grid>
</Page>

Controls/ScrollViewerDemo/ScrollContentPresenterDemo.xaml.cs

/** ScrollContentPresenter - ScrollViewer 的内容呈现器,其用来呈现 ScrollViewer 的 Content(继承自 ContentPresenter, 请参见 /Controls/BaseControl/ContentControlDemo/ContentPresenterDemo.xaml)*     类似的有 ContentPresenter, ItemsPresenter 等*/using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows10.Common;namespace Windows10.Controls.ScrollViewerDemo
{public sealed partial class ScrollContentPresenterDemo : Page{public ScrollContentPresenterDemo(){this.InitializeComponent();this.Loaded += ScrollContentPresenterDemo_Loaded;}private void ScrollContentPresenterDemo_Loaded(object sender, RoutedEventArgs e){// 找到 ScrollViewer 内的名为 ScrollContentPresenter 的 ScrollContentPresenter 控件var scrollContentPresenter = Helper.GetVisualChild<ScrollContentPresenter>(scrollViewer, "ScrollContentPresenter");scrollContentPresenter.BorderBrush = new SolidColorBrush(Colors.Red);scrollContentPresenter.BorderThickness = new Thickness(4);}}
}

OK
[源码下载]

背水一战 Windows 10 (46) - 控件(ScrollViewer 基础): ScrollViewer, ScrollBar, ScrollContentPresenter...相关推荐

  1. 背水一战 Windows 10 (47) - 控件(ScrollViewer 特性): Chaining, Rail, Inertia, Snap, Zoom

    原文:背水一战 Windows 10 (47) - 控件(ScrollViewer 特性): Chaining, Rail, Inertia, Snap, Zoom [源码下载] 背水一战 Windo ...

  2. 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation

    原文:背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation [源码下载] 背水一战 Windows 10 (55 ...

  3. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容...

    原文:背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容 [源码下载 ...

  4. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, ...

  5. 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑

    背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 原文:背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 [源码 ...

  6. 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu

    原文:背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu [源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ...

  7. 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

    背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox 原文:背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox [源码 ...

  8. 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影)...

    原文:背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影) [源码下载] 背水一战 Wind ...

  9. 背水一战 Windows 10 (41) - 控件(导航类): Frame

    原文:背水一战 Windows 10 (41) - 控件(导航类): Frame [源码下载] 背水一战 Windows 10 (41) - 控件(导航类): Frame 作者:webabcd 介绍 ...

最新文章

  1. execute taskaction$gradle怎么解决_Spring 源码中设计模式?怎么回答面试官才稳?
  2. 网站内容重复了怎么?更好的解决办法是什么?
  3. iOS ASIHttpRequest 封装
  4. tomcat端口问题
  5. 【数学和算法】初识卡尔曼滤波器(六)
  6. Jenkins搭建.NET自动编译测试与发布环境
  7. 幼儿园 c语言,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据
  8. c 语言 json序列化,C#中json字符串的序列化和反序列化 – 万能的聪哥 – 博客园...
  9. oracle 12c dbca 无法发现 asm diskgroup
  10. linux内核版本 2.6.39,编译RedHat Linux-2.6.39内核
  11. 开发者开源软件商业模式
  12. CRT团队组员博客地址统计
  13. 《活出生命的意义》生命之意义
  14. 红米NoteX和红米NoteXpro的区别
  15. (FAQ)现购的采购发票保存时提示:超过最大可钩稽数值[金蝶K/3]
  16. 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
  17. Spring Data JPA-JPA对象的四种状态
  18. 从Hexo迁移到Hugo最强攻略
  19. 大饼博士X Blog文章索引:机器学习方法系列,深度学习方法系列,三十分钟理解系列等
  20. 自学C语言/C++到底难在哪里?

热门文章

  1. wpf listview 切换数据源 位置不刷新_连载| 8 初识数据源
  2. php类代码中常看到::的操作符
  3. 大数据-MapReduce计算框架
  4. 易乐游无盘服务器缓存设置,易乐游缓存设置图文教程
  5. Git使用手册:HTTPS和SSH方式的区别和使用
  6. VDUSE(vDPA Device in Userspace)技术简介
  7. 问题:使用jdk11 报错:java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
  8. MySQL中with rollup的用法
  9. springboot拦截器与过滤器详解
  10. 创建项目提交至GitHub