Windows Phone 8.1中ScrollViewer(一)

來源:互聯網
上載者:User

標籤:windows phone 8.1   extentwidth和extendhe   viewportwidth和viewpo   scrollablewidth和hori   scrollviewer和changev   

開篇之前:

推薦王磊老師的Windows 8.1關於ScrollViewer的講解的部落格

連結:重新想象 Windows 8 Store Apps (9) - 控制項之 ScrollViewer 基礎


ScrollViewer的作用就是當內容超出了設定的範圍的時候,出現捲軸用來滾動查看超出的內容

要想在ScrollViewer裡面寫東西,OK,你可以直接寫個<TextBlock>標籤,但是當寫第二個<TextBlock>的時候就會報

錯了,說是多次設定Content值

所以要用布局控制項Grid,StackPanel之類的標籤直接寫

綜上,你可以:

<ScrollViewer> <Grid> .......</Grid> </ScrollView>

也可以:

<ScrollViewer> <ScrollViewer.Content> <Grid>.........</Grid> </ScrollViewer.Content> </ScrollViewer>

第一種寫法預設就已經添加到Content裡面了。Content裡面就是ScrollViewer的內容了。


首先,ScrollViewer重要的屬性和方法

a.HorizontalScrollMode  和  VerticalScrollMode  屬性

 用來設定水平和垂直捲軸的行為方式,即是否可以滾動。值有三種選項(Enalbled,Disabled,Auto)

b.HorizontalScrollBarVisibility   和  VerticalScrollBarVisibility  屬性

用來設定水平和垂直捲軸是否可見。值為True或者False

c.ViewChanged  方法

 表示滾動觸發的事件



有了ViewChanged方法,然後我們可以在後台隨時監控前台ScrollViewer的行動了

怎麼監視呢?如下:ScrollViewer的另一些重要屬性

a.ComputedHorizontalScrollBarVisibility   和 ComputedVerticalScrollBarVisibility 

 判斷水平和垂直捲軸的可見度

b.ExtentWidth   和  ExtentHeight

 判斷ScrollViewer內的內容的寬和高,如我下面代碼中設定的寬和高都是500

e.ViewportWidth   和   ViewportHeight

 判斷可視區的寬和高

f.ScrollableWidth 和  ScrollableHeight

 判斷可捲動區域的水平和垂直方向的大小,你會發現它的是就是拿(ExtentWidth - ViewportWidth)和

( ExtentHeight - ViewportHeight )的結果。可以從我下面的結果中看到ScrollabelWidth一直是100

g.HorizontalOffset   和  VerticalOffset 

 判斷滾動內容的水平和垂直方向的位移量,它的範圍就是【0,f】,f 就指的是上面 f 代表的值

方法:

我們也可以動態指定ScrollViewer滾動到哪裡

Windows 8.1中是用ScrollToHorizontalOffset()和ScrollToVerticalOffset()這兩個方法,當然仍然可以在Windows

Phone 8.1中使用,但是方法已經到期了

最新的WP8.1中類似功能的方法是ChangeView()方法,參數就是上面兩個值,最後一個是zoomfactor,預設為1即可


好了,理論我就學了這麼多,下面直接貼代碼了:

這裡由於空間有限,我就主要寫了水平捲軸的,垂直捲軸跟它是一樣一樣的

XAML:

<Page    x:Class="TestUnion.ScrollViewerTest"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="using:TestUnion"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    mc:Ignorable="d"    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">    <Grid>        <Grid.RowDefinitions>            <RowDefinition Height="50*"/>            <RowDefinition Height="50*"/>        </Grid.RowDefinitions>        <ScrollViewer x:Name="scrollViewer" IsDeferredScrollingEnabled="True"                      HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled"                      HorizontalScrollBarVisibility="Visible"                      VerticalScrollBarVisibility="Visible"                      ViewChanged="scrollViewer_ViewChanged">            <ScrollViewer.Content>                <StackPanel Height="500" Width="500">                    <StackPanel.Background>                        <ImageBrush ImageSource="Assets/3.jpg" />                    </StackPanel.Background>                    <TextBox Header="使用者名稱:" />                    <PasswordBox Header="密碼:" />                    <PasswordBox Header="確認密碼:"/>                    <Button x:Name="btn" Content="滾動到指定的水平或垂直位移位置(這裡選置中)" Click="btn_Click"/>                </StackPanel>            </ScrollViewer.Content>        </ScrollViewer>        <StackPanel Grid.Row="1" Orientation="Vertical">            <StackPanel Orientation="Horizontal">                <TextBox x:Name="horVisibility" PlaceholderText="判斷水平捲軸可見度" Header="ComputedHorizontalScrollBarVisibility" Width="300" Margin="10,10,0,0" />            </StackPanel>            <StackPanel Orientation="Horizontal">                <TextBox x:Name="verVisibility" PlaceholderText="判斷垂直捲軸可見度" Header="ComputedVerticalScrollBarVisibility" Width="300" Margin="10,10,0,0" />            </StackPanel>            <StackPanel Orientation="Horizontal">                <!--這邊當然也存在-->                <!--ExtentHeight-ScrollViewer內的內容的高-->                <!--ViewportHeight-可視區的高-->                <TextBox x:Name="extentWidth" PlaceholderText="ScrollViewer內的內容的寬" Header="ExtentWidth" Width="255" Margin="10,10,0,0" />                <TextBox x:Name="viewportWidth" PlaceholderText="可視區的寬" Header="ViewportWidth " Width="120" Margin="10,10,0,0" />            </StackPanel>            <StackPanel Orientation="Horizontal">                <!--這邊當然也存在-->                <!--VerticalOffset-滾動內容的垂直方向的位移量-->                <!--ScrollableHeight-可捲動區域的垂直方向的大小-->                <TextBox x:Name="horizontalOffset" PlaceholderText="滾動內容水平位移量" Header="HorizontalOffset" Width="195" Margin="10,10,0,0" />                <TextBox x:Name="scrollableWidth" PlaceholderText="可捲動區域水平大小" Header="ScrollableWidth" Width="195" Margin="10,10,0,0" />            </StackPanel>        </StackPanel>    </Grid></Page>

.cs:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.InteropServices.WindowsRuntime;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;// “空白頁”項目範本在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介紹namespace TestUnion{    /// <summary>    /// 可用於自身或導航至 Frame 內部的空白頁。    /// </summary>    public sealed partial class ScrollViewerTest : Page    {        public ScrollViewerTest()        {            this.InitializeComponent();        }        /// <summary>        /// 在此頁將要在 Frame 中顯示時進行調用。        /// </summary>        /// <param name="e">描述如何訪問此頁的事件數目據。        /// 此參數通常用於配置頁。</param>        protected override void OnNavigatedTo(NavigationEventArgs e)        {        }        private void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)        {            //ComputedHorizontalScrollBarVisibility - 當前水平捲軸的可見度            horVisibility.Text = scrollViewer.ComputedHorizontalScrollBarVisibility.ToString();            //ComputedVerticalScrollBarVisibility - 當前垂直捲軸的可見度            verVisibility.Text = scrollViewer.ComputedVerticalScrollBarVisibility.ToString();            //ExtentWidth - ScrollViewer 內的內容的寬            extentWidth.Text = scrollViewer.ExtentWidth.ToString();            //ViewportWidth - 可視區的寬            viewportWidth.Text = scrollViewer.ViewportWidth.ToString();            //HorizontalOffset - 滾動內容的水平方向的位移量            horizontalOffset.Text = scrollViewer.HorizontalOffset.ToString();            //ScrollableWidth - 可捲動區域的水平方向的大小            scrollableWidth.Text = scrollViewer.ScrollableWidth.ToString();        }        private void btn_Click(object sender, RoutedEventArgs e)        {            //讓ScrollView裡面的內容置中            scrollViewer.ChangeView(scrollViewer.ScrollableWidth / 2, scrollViewer.ScrollableHeight / 2,1);            //這邊ScrollToHorizontalOffset()和ScrollToVerticalOffset()函數已經到期了(但是仍然是可以用的),現在改用上面的ChangeView()函數            //ChangeView()函數第一個和第二個參數分別是水平滾動的位移量和垂直滾動的位移量,第三個是zoomfactor,預設值是1,好像是關於縮放的,這裡設為1就行了            //scrollViewer.ScrollToHorizontalOffset(scrollViewer.ScrollableWidth / 2);            //scrollViewer.ScrollToVerticalOffset(scrollViewer.ScrollableHeight / 2);        }    }}

運行:

初始:



左滑:



點擊按鈕讓其置中:




Windows Phone 8.1中ScrollViewer(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.