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
    [源码下载]

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/webabcd/p/6887865.html
Copyright © 2011-2022 走看看