13-常用控件之滚动内容控件ScrollViewer

本文介绍如何利用ScrollViewer和XAML语法在Windows Phone应用中实现内容的滚动功能,包括设置重要属性和通过实例展示代码实现图片在屏幕中的滚动效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ScrollViewer使应用程序内容具有滚动功能。

2.XAML语法

         <ScrollViewer...../>

         <ScrollViewer>内容</ScrollViewer>

3.重要的属性:HorizontalScrollBarVisibility   VerticalScrollBarVisibility 

                            使内容可以水平滚动                 垂直滚动

4.实例:使用计时器让图片可以在屏幕中滚动。



5.实现代码

<phone:PhoneApplicationPage 
    x:Class="PhoneApp1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel 包含应用程序的名称和页标题-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - 在此处放置其他内容-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="124*" />
                <ColumnDefinition Width="332*" />
            </Grid.ColumnDefinitions>
            <ScrollViewer Height="283" HorizontalAlignment="Left" Margin="15,87,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="424" HorizontalScrollBarVisibility="Hidden" Grid.ColumnSpan="2">
                <StackPanel Height="902" Name="stackPanel1" Width="273" />
            </ScrollViewer>
            
            <Button Content="向上" Height="72" HorizontalAlignment="Left" Margin="34,410,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" Grid.ColumnSpan="2" />
            <Button Content="停止" Height="72" HorizontalAlignment="Left" Margin="112,410,0,0" Name="button2" VerticalAlignment="Top" Width="160" Click="button2_Click" Grid.Column="1" />
        </Grid>
    </Grid>

    <!--演示 ApplicationBar 用法的示例代码-->
    <!--<phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="按钮 1"/>
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="按钮 2"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="菜单项 1"/>
                <shell:ApplicationBarMenuItem Text="菜单项 2"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>-->

</phone:PhoneApplicationPage>



using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Windows.Media.Imaging;
using System.Windows.Threading;

namespace PhoneApp1
{
    public partial class MainPage : PhoneApplicationPage
    {

        DispatcherTimer dispatcherTimer = new DispatcherTimer();
        // 构造函数
        public MainPage()
        {
            InitializeComponent();

            //设置计时器的间隔时间
            dispatcherTimer.Interval = new TimeSpan(500);
            //设置计时器的Tick方法,超过500之后调用这个方法
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);


            //添加图片到ScorollView里面的StackPanel中
            for (int i = 0; i <4; i++)
            {
                //创建一个Image对象
                Image imgItem = new Image();
                //设置图片的宽度和高度
                imgItem.Width = 200;
                imgItem.Height = 200;
                //4张图片循环添加到StackPanel的子节点上
                if (i % 4 == 0)
                {
                    //设置Image对象的Source属性,指定放入图片的位置
                    imgItem.Source = (new BitmapImage(new Uri("a.jpg", UriKind.Relative)));
                }
                else if (i % 4 == 1)
                {

                    imgItem.Source = (new BitmapImage(new Uri("b.jpg", UriKind.Relative)));
                }
                else if (i % 4 == 2)
                {
                    imgItem.Source = (new BitmapImage(new Uri("c.jpg", UriKind.Relative)));
                }
                else
                {
                    imgItem.Source = (new BitmapImage(new Uri("d.jpg", UriKind.Relative)));
                }
                //向stackPanel中依次添加图片
                this.stackPanel1.Children.Add(imgItem);
            }
        }

        //超过时间间隔后调用的方法
        void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            //ScrollToVerticalOffset方法将内容垂直方向滚动
            scrollViewer1.ScrollToVerticalOffset(scrollViewer1.VerticalOffset + 1);
        }
        //点击启动按钮的时候触发的方法,图片从上到下滚动
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //开始计时器
            dispatcherTimer.Start();
        }
        //点击停止按钮的时候触发的方法,图片停止
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //停止计时器
            dispatcherTimer.Stop();
        }


    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Muxiyale

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

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

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

打赏作者

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

抵扣说明:

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

余额充值