zoukankan      html  css  js  c++  java
  • 背水一战 Windows 10 (50)

    [源码下载]


    背水一战 Windows 10 (50) - 控件(集合类): ItemsControl - 基础知识, 数据绑定, ItemsPresenter, GridViewItemPresenter, ListViewItemPresenter



    作者:webabcd


    介绍
    背水一战 Windows 10 之 控件(集合类 - ItemsControl)

    • 基础知识
    • 数据绑定
    • ItemsPresenter
    • GridViewItemPresenter
    • ListViewItemPresenter



    示例
    1、ItemsControl 的基础知识
    Controls/CollectionControl/ItemsControlDemo/ItemsControlDemo1.xaml

    <Page
        x:Class="Windows10.Controls.CollectionControl.ItemsControlDemo.ItemsControlDemo1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Controls.CollectionControl.ItemsControlDemo"
        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">
    
                <!--
                    ItemsControl - 集合控件
                        Items - 项集合([ContentProperty(Name = "Items")])
                        ItemsPanel - 用于指定 items 的布局控件,任何 Panel 类型的布局控件均可,所有 items 将在 Panel 内显示(Panel 是所有 items 的容器)
                            给 ItemsControl 用的,可虚拟化的布局控件有:ItemsStackPanel, ItemsWrapGrid, VirtualizingStackPanel, WrapGrid. 请参见:/Controls/CollectionControl/ItemsControlDemo/LayoutControl/
                        ItemContainerTransitions - 指定 ItemsControl 的项容器的过渡效果
                -->
                <ItemsControl Name="itemsControl" Margin="5" HorizontalAlignment="Left">
                    <ItemsControl.Items>
                        <Rectangle Width="100" Height="100" Fill="Red" />
                        <Rectangle Width="100" Height="100" Fill="Green" />
                        <Rectangle Width="100" Height="100" Fill="Blue" />
                    </ItemsControl.Items>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemContainerTransitions>
                        <TransitionCollection>
                            <EntranceThemeTransition FromVerticalOffset="1000"/>
                        </TransitionCollection>
                    </ItemsControl.ItemContainerTransitions>
                </ItemsControl>
    
                <TextBlock Name="lblMsg" Margin="5 " />
    
            </StackPanel>
        </Grid>
    </Page>

    Controls/CollectionControl/ItemsControlDemo/ItemsControlDemo1.xaml.cs

    /*
     * ItemsControl - 集合控件(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
     *     ItemsPanelRoot - 用于获取 items 的布局控件(返回一个 Panel 类型的对象)
     *     
     * 
     * 本例用于演示 ItemsControl 的基础知识
     */
    
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    
    namespace Windows10.Controls.CollectionControl.ItemsControlDemo
    {
        public sealed partial class ItemsControlDemo1 : Page
        {
            public ItemsControlDemo1()
            {
                this.InitializeComponent();
    
                this.Loaded += ItemsControlDemo1_Loaded;
            }
    
            private void ItemsControlDemo1_Loaded(object sender, RoutedEventArgs e)
            {
                lblMsg.Text = "items 的布局控件: " + itemsControl.ItemsPanelRoot.GetType().ToString();
            }
        }
    }


    2、ItemsControl 的数据绑定
    Controls/CollectionControl/ItemsControlDemo/ItemsControlDemo2.xaml

    <Page
        x:Class="Windows10.Controls.CollectionControl.ItemsControlDemo.ItemsControlDemo2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Controls.CollectionControl.ItemsControlDemo"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        
        xmlns:common="using:Windows10.Common">
    
        <Grid Background="Transparent">
            <StackPanel Margin="10 0 10 10" Orientation="Horizontal">
    
                <!--
                    ItemsControl - 集合控件
                        ItemsSource - 数据源
                        DisplayMemberPath - 每个数据项需要显示的字段
                -->
                <ItemsControl Name="itemsControl" Margin="5" Width="400" Height="400" HorizontalAlignment="Left" VerticalAlignment="Top"
                              ItemsSource="{x:Bind Employees}" DisplayMemberPath="Name" />
    
    
    
                <!--
                    ItemsControl - 集合控件
                        ItemsPanel - 用于指定 items 的布局控件,任何 Panel 类型的布局控件均可,所有 items 将在 Panel 内显示(Panel 是所有 items 的容器)
                            给 ItemsControl 用的,可虚拟化的布局控件有:ItemsStackPanel, ItemsWrapGrid, VirtualizingStackPanel, WrapGrid. 请参见:/Controls/CollectionControl/ItemsControlDemo/LayoutControl/
                        ItemContainerStyle - 每个数据项的容器的样式
                            ListView 的 ItemContainer 是 ListViewItem
                            GridView 的 ItemContainer 是 GridViewItem
                        ItemTemplate - 每个数据项的数据模板
                -->
                <ListView Name="listView" Margin="5" Width="400" Height="400" HorizontalAlignment="Left" VerticalAlignment="Top"
                          ItemsSource="{x:Bind Employees}">
                    <ListView.ItemTemplate>
                        <DataTemplate x:DataType="common:Employee">
                            <Grid Background="Red">
                                <TextBlock Text="{x:Bind Name}" />
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Vertical" />
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>
                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Setter Property="Padding" Value="10" />
                            <Setter Property="Background" Value="Orange" />
                        </Style>
                    </ListView.ItemContainerStyle>
                </ListView>
    
            </StackPanel>
        </Grid>
    </Page>

    Controls/CollectionControl/ItemsControlDemo/ItemsControlDemo2.xaml.cs

    /*
     * ItemsControl - 集合控件(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
     *     DependencyObject ContainerFromIndex(int index) - 获取指定索引位置的 item 的 container
     *     DependencyObject ContainerFromItem(object item) - 获取指定数据对象的 item 的 container
     *     int IndexFromContainer(DependencyObject container) - 获取指定 ItemContainer 的索引位置
     *     object ItemFromContainer(DependencyObject container) - 获取指定 ItemContainer 的绑定对象
     *     
     * 
     * 本例用于演示 ItemsControl 的数据绑定
     */
    
    using System.Collections.ObjectModel;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using System.Linq;
    using Windows10.Common;
    
    namespace Windows10.Controls.CollectionControl.ItemsControlDemo
    {
        public sealed partial class ItemsControlDemo2 : Page
        {
            public ObservableCollection<Employee> Employees { get; set; } = TestData.GetEmployees(100);
    
            public ItemsControlDemo2()
            {
                this.InitializeComponent();
    
                listView.Loaded += ListView_Loaded;
            }
    
            private void ListView_Loaded(object sender, RoutedEventArgs e)
            {
                // 获取第 4 条数据的 ItemContainer
                ListViewItem itemContainer1 = listView.ContainerFromIndex(3) as ListViewItem;
    
                // 获取第 1 条数据的 ItemContainer
                ListViewItem itemContainer2 = listView.ContainerFromItem(Employees.First()) as ListViewItem;
    
                // 获取 itemContainer1 的索引位置
                int index = listView.IndexFromContainer(itemContainer1);
    
                // 获取 itemContainer2 的绑定对象
                Employee employee = listView.ItemFromContainer(itemContainer2) as Employee;
            }
        }
    }


    3、ItemsPresenter - 用来呈现 ItemsControl 的 Items
    Controls/CollectionControl/ItemsControlDemo/ItemsPresenterDemo.xaml

    <Page
        x:Class="Windows10.Controls.CollectionControl.ItemsControlDemo.ItemsPresenterDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Controls.CollectionControl.ItemsControlDemo"
        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">
    
                <!--
                    ItemsPresenter - 用来呈现 ItemsControl 的 Items
                        Padding - 全部 Items 与 ItemsPresenter 之间的 Padding
                        Header, HeaderTemplate, Footer, HeaderTransitions - 顾名思义,不用解释
                        HeaderTransitions - header 的过渡效果
                        FooterTransitions - footer 的过渡效果
                -->
                <ItemsControl Margin="5" HorizontalAlignment="Left">
                    <ItemsControl.Items>
                        <Rectangle Width="100" Height="100" Fill="Red" />
                        <Rectangle Width="100" Height="100" Fill="Green" />
                        <Rectangle Width="100" Height="100" Fill="Blue" />
                    </ItemsControl.Items>
                    <ItemsControl.Template>
                        <ControlTemplate>
                            <Border BorderBrush="Orange" BorderThickness="1" Width="400" Height="400">
                                <ItemsPresenter VerticalAlignment="Center" HorizontalAlignment="Center"
                                                Padding="0">
                                    <ItemsPresenter.HeaderTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="header" Foreground="Orange" />
                                        </DataTemplate>
                                    </ItemsPresenter.HeaderTemplate>
                                    <ItemsPresenter.FooterTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="footer" Foreground="Orange" />
                                        </DataTemplate>
                                    </ItemsPresenter.FooterTemplate>
                                    <ItemsPresenter.HeaderTransitions>
                                        <TransitionCollection>
                                            <EntranceThemeTransition FromVerticalOffset="1000"/>
                                        </TransitionCollection>
                                    </ItemsPresenter.HeaderTransitions>
                                    <ItemsPresenter.FooterTransitions>
                                        <TransitionCollection>
                                            <EntranceThemeTransition FromVerticalOffset="1000"/>
                                        </TransitionCollection>
                                    </ItemsPresenter.FooterTransitions>
                                </ItemsPresenter>
                            </Border>
                        </ControlTemplate>
                    </ItemsControl.Template>
                </ItemsControl>
    
            </StackPanel>
        </Grid>
    </Page>

    Controls/CollectionControl/ItemsControlDemo/ItemsPresenterDemo.xaml.cs

    /*
     * ItemsPresenter - 用来呈现 ItemsControl 的 Items(继承自 FrameworkElement, 请参见 /Controls/BaseControl/FrameworkElementDemo/)
     */
    
    using Windows.UI.Xaml.Controls;
    
    namespace Windows10.Controls.CollectionControl.ItemsControlDemo
    {
        public sealed partial class ItemsPresenterDemo : Page
        {
            public ItemsPresenterDemo()
            {
                this.InitializeComponent();
            }
        }
    }


    4、GridViewItemPresenter 和 ListViewItemPresenter - 用于呈现 GridView 或 ListView 的 Item
    Controls/CollectionControl/ItemsControlDemo/ItemPresenterDemo.xaml

    <Page
        x:Class="Windows10.Controls.CollectionControl.ItemsControlDemo.ItemPresenterDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Windows10.Controls.CollectionControl.ItemsControlDemo"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Page.Resources>
            <Style x:Key="MyGridViewItemPresenterTemplate" TargetType="GridViewItem">
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="GridViewItem">
                            <!--
                                GridViewItemPresenter 和 ListViewItemPresenter - 用于呈现 GridView 或 ListView 的 Item
                                    Margin - item 的 margin
                                    SelectionCheckMarkVisualEnabled - 是否显示选中状态的标记
                                    SelectedBorderThickness - 选中状态的边框粗细
                                    SelectedBackground - 选中状态的边框颜色
                                    CheckBrush - 选中状态的图标(本例就是那个小对勾)
                                    ...... - 还有好多好多,看文档吧
                            -->
                            <GridViewItemPresenter Margin="10" SelectionCheckMarkVisualEnabled="True" SelectedBorderThickness="3" SelectedBackground="Red" CheckBrush="{ThemeResource ListViewItemCheckThemeBrush}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Page.Resources>
    
        <Grid Background="Transparent">
            <GridView x:Name="gridView" Margin="10 0 10 10" 
                      ItemContainerStyle="{StaticResource MyGridViewItemPresenterTemplate}"
                      SelectionMode="Multiple">
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Height="100" Width="100" Background="Blue">
                            <TextBlock x:Name="lblName" Text="{Binding Name}" Foreground="Yellow" />
                            <TextBlock x:Name="lblAge" Text="{Binding Age}" Foreground="Aqua" />
                            <TextBlock x:Name="lblIsMale" Text="{Binding IsMale}" Foreground="Gray" />
                        </StackPanel>
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>
        </Grid>
    </Page>

    Controls/CollectionControl/ItemsControlDemo/ItemPresenterDemo.xaml.cs

    /*
     * GridViewItemPresenter, ListViewItemPresenter - 用于呈现 GridView 或 ListView 的 Item(继承自 ContentPresenter, 请参见 /Controls/BaseControl/ContentControlDemo/ContentPresenterDemo.xaml)
     */
    
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    using Windows10.Common;
    
    namespace Windows10.Controls.CollectionControl.ItemsControlDemo
    {
        public sealed partial class ItemPresenterDemo : Page
        {
            public ItemPresenterDemo()
            {
                this.InitializeComponent();
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                gridView.ItemsSource = TestData.GetEmployees();
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    spring.jar的下载地址
    spring学习(1)
    供求信息网(2)
    编写学生增删改查系统时碰到的问题
    js中innerText/value/innerHTML三个属性的区别
    form的提交方式
    错误记录(1)
    供求信息网
    GYM 101673F(树计数)
    GYM 101673G(dp)
  • 原文地址:https://www.cnblogs.com/webabcd/p/6887865.html
Copyright © 2011-2022 走看看