zoukankan      html  css  js  c++  java
  • 重新想象 Windows 8.1 Store Apps (78)

    [源码下载]


    重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup



    作者:webabcd


    介绍
    重新想象 Windows 8.1 Store Apps 之控件增强

    • ScrollViewer - 滚动视图控件的增强
    • FlipView - 滑动视图控件的增强
    • Popup - 弹出框控件的增强



    示例
    1、演示 ScrollViewer 的新特性
    ScrollViewerDemo.xaml

    <Page
        x:Class="Windows81.Controls.ScrollViewerDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows81.Controls"
        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="120 0 0 0">
    
                <TextBlock Name="lblMsg" />
    
                <!--
                    ScrollViewer - 滚动视图控件,新增功能如下
                        TopHeader - 水平可滚动,垂直不动
                        LeftHeader - 垂直可滚动,水平不动
                        TopLeftHeader - 固定不动
                
                    注:如果要使用 TopHeader, LeftHeader, TopLeftHeader 则 ScrollViewer.Content 中的内容必须是 HorizontalAlignment="Left" VerticalAlignment="Top"
                -->
                <ScrollViewer Name="scrollViewer" Width="400" Height="400" Margin="0 10 0 0"
                              HorizontalAlignment="Left" VerticalAlignment="Top"
                              HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled"
                              HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
                    
                    <ScrollViewer.Content>
                        <Image Source="/Assets/Son.jpg" Width="1000" 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>
                
                <Button Name="btnChangeView" Content="Change View" Click="btnChangeView_Click" Margin="0 10 0 0" />
    
            </StackPanel>
        </Grid>
    </Page>

    ScrollViewerDemo.xaml.cs

    /*
     * ScrollViewer - 滚动视图控件
     * 
     * 
     * 关于 ScrollViewer 的基础请参见:
     * http://www.cnblogs.com/webabcd/archive/2013/03/07/2947313.html
     * http://www.cnblogs.com/webabcd/archive/2013/03/11/2953402.html
     */
    
    using Windows.UI.Xaml.Controls;
    
    namespace Windows81.Controls
    {
        public sealed partial class ScrollViewerDemo : Page
        {
            public ScrollViewerDemo()
            {
                this.InitializeComponent();
            }
    
            private void btnChangeView_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                // ScrollToHorizontalOffset 和 ScrollToVerticalOffset 都舍弃了
                // ChangeView() - 可以设置水平平移,垂直平移和缩放比例,并且可以指定是否使用动画过渡
                bool result = scrollViewer.ChangeView(100f, 100f, 1f, false);
            }
        }
    }

    2、演示 FlipView 的新特性
    FlipViewDemo.xaml

    <Page
        x:Class="Windows81.Controls.FlipViewDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows81.Controls"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <!--
            本例是一个 FlipView 和 ListBox(用于显示小点点)联动的 Demo
        
            FlipView 在 win8.1 中新增了一个属性 UseTouchAnimationsForAllNavigation,将其设置为 true 可以保证无论是基于触控的模式,还是基于按钮的模式,还是编程的模式,FlipView 都会有一致的动画体验
        -->
    
        <!--定义 ListBox(用于显示小点点)的样式-->
        <Page.Resources>
            <Style x:Key="ItemContainerStyle" TargetType="ListBoxItem">
                <Setter Property="Width" Value="32"/>
                <Setter Property="Height" Value="20"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Grid Background="{TemplateBinding Background}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates" >
                                        <VisualState x:Name="Normal" />
                                        <VisualState x:Name="PointerOver"/>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="SelectionStates" >
                                        <VisualState x:Name="Unselected" />
                                        <VisualState x:Name="Selected">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" BeginTime="00:00:00" Duration="0" To="#FF58CC0C" />
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="SelectedUnfocused">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" BeginTime="00:00:00" Duration="0"  To="#FF58CC0C" />
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="SelectedPressed">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" BeginTime="00:00:00" Duration="0"  To="#FF58CC0C" />
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="SelectedPointerOver">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" BeginTime="00:00:00" Duration="0"  To="#FF58CC0C" />
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <Rectangle x:Name="fillColor" IsHitTestVisible="False" Width="32" Height="20" Fill="#FFBFBFBF" Margin="5,0"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="ListBoxStyle" TargetType="ListBox">
                <Setter Property="Foreground" Value="{StaticResource ListBoxForegroundThemeBrush}"/>
                <Setter Property="Background" Value="{StaticResource ListBoxBackgroundThemeBrush}"/>
                <Setter Property="BorderBrush" Value="{StaticResource ListBoxBorderThemeBrush}"/>
                <Setter Property="BorderThickness" Value="{StaticResource ListBoxBorderThemeThickness}"/>
                <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
                <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled"/>
                <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="True"/>
                <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled"/>
                <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="True"/>
                <Setter Property="ScrollViewer.ZoomMode" Value="Disabled"/>
                <Setter Property="IsTabStop" Value="False"/>
                <Setter Property="TabNavigation" Value="Once"/>
                <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/>
                <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/>
                <Setter Property="ItemsPanel">
                    <Setter.Value>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBox">
                            <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualState x:Name="Normal"/>
                                        <VisualState x:Name="Disabled"/>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="FocusStates">
                                        <VisualState x:Name="Focused"/>
                                        <VisualState x:Name="Unfocused"/>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <ScrollViewer x:Name="ScrollViewer" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
                                    <ItemsPresenter/>
                                </ScrollViewer>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Page.Resources>
        
        <Grid Background="Transparent">
            <StackPanel Margin="120 0 0 0">
    
                <!--
                    FlipView - 滑动视图控件
                        UseTouchAnimationsForAllNavigation - true 代表无论是基于触控的模式,还是基于按钮的模式,还是编程的模式,FlipView 都会有一致的动画体验
                -->
                <FlipView x:Name="flipView" Width="480" Height="270" BorderBrush="Black" BorderThickness="1" UseTouchAnimationsForAllNavigation="True">
                    <FlipView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Image Width="480" Height="270" Source="{Binding Image}" Stretch="UniformToFill"/>
                                <Border Background="#A5000000" Height="80" VerticalAlignment="Bottom">
                                    <TextBlock Text="{Binding Title}" FontSize="26.667" Foreground="#CCFFFFFF" Padding="15,20"/>
                                </Border>
                            </Grid>
                        </DataTemplate>
                    </FlipView.ItemTemplate>
                    <FlipView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </FlipView.ItemsPanel>
                </FlipView>
    
                <ListBox x:Name="listBox" Width="478" Height="40" Background="#A5000000" HorizontalAlignment="Center" Margin="0,-5,0,0" 
                         SelectedItem="{Binding SelectedItem, ElementName=flipView, Mode=TwoWay}"
                         ItemContainerStyle="{StaticResource ItemContainerStyle}"
                         Style="{StaticResource ListBoxStyle}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                </ListBox>
                
            </StackPanel>
        </Grid>
    </Page>

    FlipViewDemo.xaml.cs

    /*
     * FlipView - 滑动视图控件
     * FlipView 在 win8.1 中新增了一个属性 UseTouchAnimationsForAllNavigation,将其设置为 true 可以保证无论是基于触控的模式,还是基于按钮的模式,还是编程的模式,FlipView 都会有一致的动画体验
     * 
     * 提示:本例是一个 FlipView 和 ListBox(用于显示小点点)联动的 Demo
     * 
     * 关于 FlipView 的基础请参见:http://www.cnblogs.com/webabcd/archive/2013/01/21/2869167.html
     */
    
    using System;
    using System.Collections.ObjectModel;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    using Windows81.Common;
    
    namespace Windows81.Controls
    {
        public sealed partial class FlipViewDemo : Page
        {
            public FlipViewDemo()
            {
                this.InitializeComponent();
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                // 设置 FlipView 和 ListBox 的数据源
                var flipViewData = new FlipViewDataSource();
                flipView.ItemsSource = flipViewData.Items;
                listBox.ItemsSource = flipViewData.Items;
                listBox.SelectionChanged += listBox_SelectionChanged;
            }
    
            void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                // 确保在按钮模式下,FlipView 能正确地显示箭头按钮
                flipView.Focus(Windows.UI.Xaml.FocusState.Pointer);
            }
        }
    
    
        // 用于提供数据
        public sealed class FlipViewDataSource : BindableBase
        {
            private static Uri _baseUri = new Uri("ms-appx:///");
    
            public FlipViewDataSource(String title, String picture)
            {
                this._title = title;
                this._picture = picture;
            }
    
            private string _title = string.Empty;
            public string Title
            {
                get { return this._title; }
                set { this.SetProperty(ref this._title, value); }
            }
    
            private Uri _image = null;
            private String _picture = null;
            public Uri Image
            {
                get
                {
                    return new Uri(_baseUri, this._picture);
                }
    
                set
                {
                    this._picture = null;
                    this.SetProperty(ref this._image, value);
                }
            }
    
            private ObservableCollection<object> _items = new ObservableCollection<object>();
            public ObservableCollection<object> Items
            {
                get { return this._items; }
            }
    
            public FlipViewDataSource()
            {
                Items.Add(new FlipViewDataSource("aaa", "Assets/Son.jpg"));
                Items.Add(new FlipViewDataSource("bbb", "Assets/Son.jpg"));
                Items.Add(new FlipViewDataSource("ccc", "Assets/Son.jpg"));
                Items.Add(new FlipViewDataSource("ddd", "Assets/Son.jpg"));
                Items.Add(new FlipViewDataSource("eee", "Assets/Son.jpg"));
            }
        }
    }


    3、演示 Popup 的新特性
    PopupDemo.xaml

    <Page
        x:Class="Windows81.Controls.PopupDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows81.Controls"
        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="120 0 0 0">
    
                <Button Name="btnClose" Content="关闭全部 Popup" Click="btnClose_Click" />
    
                <Popup HorizontalOffset="0" VerticalOffset="50" IsLightDismissEnabled="False" IsOpen="True">
                    <Popup.Child>
                        <Border BorderBrush="Red" BorderThickness="1" Background="Blue" Width="200" Height="200">
                            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock Text="我是 Popup" FontSize="24.667" HorizontalAlignment="Center" />
                            </StackPanel>
                        </Border>
                    </Popup.Child>
                </Popup>
    
                <Popup HorizontalOffset="250" VerticalOffset="50" IsLightDismissEnabled="False" IsOpen="True">
                    <Popup.Child>
                        <Border BorderBrush="Red" BorderThickness="1" Background="Blue" Width="200" Height="200">
                            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock Text="我是 Popup" FontSize="24.667" HorizontalAlignment="Center" />
                            </StackPanel>
                        </Border>
                    </Popup.Child>
                </Popup>
    
            </StackPanel>
        </Grid>
    </Page>

    PopupDemo.xaml.cs

    /*
     * Popup - 弹出框控件
     * 
     * 
     * 关于 Popup 的基础请参见:
     * http://www.cnblogs.com/webabcd/archive/2013/01/14/2859153.html
     */
    
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media;
    
    namespace Windows81.Controls
    {
        public sealed partial class PopupDemo : Page
        {
            public PopupDemo()
            {
                this.InitializeComponent();
            }
    
            private void btnClose_Click(object sender, RoutedEventArgs e)
            {
                // VisualTreeHelper 中新增了 GetOpenPopups() 方法,可以获取可视树中的全部 Popup 对象
                var popups = VisualTreeHelper.GetOpenPopups(Window.Current);
                foreach (var popup in popups)
                {
                    popup.IsOpen = false;
                }
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    第十周作业--阅读(五一)
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    模板
    第五周作业
    第四周作业
    第三周作业
    文件
  • 原文地址:https://www.cnblogs.com/webabcd/p/3777188.html
Copyright © 2011-2022 走看看