ItemsControl 使用Grid布局

ItemsControl控件经常用到,在ItemsPanel里大多是StackPanel,WrapPanel,以下项目演示如何使用Grid用于ItemsControl布局

1.先看运行效果

2.xaml代码如下

  1 <Window x:Class="GridHelperDemo.MainWindow"
  2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4         xmlns:GridHelperDemo="clr-namespace:GridHelperDemo"
  5         Title="MainWindow"
  6         Height="350"
  7         Width="525">
  8     <Window.DataContext>
  9         <GridHelperDemo:StatisticItemList>
 10             <GridHelperDemo:StatisticItem Index="0"
 11                                           Name="张三"
 12                                           Value="65" />
 13             <GridHelperDemo:StatisticItem  Index="1"
 14                                            Name="李四"
 15                                            Value="91" />
 16             <GridHelperDemo:StatisticItem Index="2"
 17                                           Name="老王"
 18                                           Value="37" />
 19             <GridHelperDemo:StatisticItem  Index="3"
 20                                            Name="小李"
 21                                            Value="81" />
 22             <GridHelperDemo:StatisticItem  Index="4"
 23                                            Name="大强"
 24                                            Value="64" />
 25             <GridHelperDemo:StatisticItem Index="5"
 26                                           Name="崔颢"
 27                                           Value="43" />
 28             <GridHelperDemo:StatisticItem  Index="6"
 29                                            Name="明月"
 30                                            Value="82" />
 31             <GridHelperDemo:StatisticItem  Index="7"
 32                                            Name="阿辉"
 33                                            Value="13" />
 34         </GridHelperDemo:StatisticItemList>
 35     </Window.DataContext>
 36     <Grid>
 37         <Grid.RowDefinitions>
 38             <RowDefinition Height="auto" />
 39             <RowDefinition />
 40             <RowDefinition Height="auto" />
 41             <RowDefinition />
 42         </Grid.RowDefinitions>
 43         <TextBlock HorizontalAlignment="Center"
 44                    FontSize="20"
 45                    Text="根据ItemsSource生成行" />
 46         <!--根据ItemsSource生成行-->
 47         <ItemsControl ItemsSource="{Binding}"
 48                       Grid.Row="1">
 49             <ItemsControl.ItemsPanel>
 50                 <ItemsPanelTemplate>
 51                     <Grid GridHelperDemo:GridHelper.RowsCount="{Binding Count}">
 52                     </Grid>
 53                 </ItemsPanelTemplate>
 54             </ItemsControl.ItemsPanel>
 55             <ItemsControl.ItemTemplate>
 56                 <DataTemplate>
 57                     <Grid>
 58                         <Grid.ColumnDefinitions>
 59                             <ColumnDefinition />
 60                             <ColumnDefinition />
 61                         </Grid.ColumnDefinitions>
 62
 63                         <Border BorderBrush="Black"
 64                                 BorderThickness="1">
 65                             <TextBlock Text="{Binding Name}" />
 66                         </Border>
 67
 68                         <Border BorderBrush="Black"
 69                                 BorderThickness="1"
 70                                 Grid.Column="1">
 71                             <TextBlock Text="{Binding Value}" />
 72                         </Border>
 73                     </Grid>
 74                 </DataTemplate>
 75             </ItemsControl.ItemTemplate>
 76             <ItemsControl.ItemContainerStyle>
 77                 <Style>
 78                     <Setter Property="Grid.Row"
 79                             Value="{Binding Index}" />
 80                 </Style>
 81             </ItemsControl.ItemContainerStyle>
 82
 83         </ItemsControl>
 84
 85         <TextBlock HorizontalAlignment="Center"
 86                    FontSize="20"
 87                    Grid.Row="2"
 88                    Text="根据ItemsSource生成列" />
 89         <!--根据ItemsSource生成列-->
 90         <ItemsControl ItemsSource="{Binding}"
 91                       Grid.Row="3">
 92             <ItemsControl.ItemsPanel>
 93                 <ItemsPanelTemplate>
 94                     <Grid GridHelperDemo:GridHelper.ColumnsCount="{Binding Count}">
 95                     </Grid>
 96                 </ItemsPanelTemplate>
 97             </ItemsControl.ItemsPanel>
 98             <ItemsControl.ItemTemplate>
 99                 <DataTemplate>
100                     <Grid>
101                         <Grid.RowDefinitions>
102                             <RowDefinition />
103                             <RowDefinition />
104                         </Grid.RowDefinitions>
105
106                         <Border BorderBrush="Black"
107                                 BorderThickness="1">
108                             <TextBlock Text="{Binding Name}" />
109                         </Border>
110
111                         <Border BorderBrush="Black"
112                                 BorderThickness="1"
113                                 Grid.Row="1">
114                             <TextBlock Text="{Binding Value}" />
115                         </Border>
116                     </Grid>
117                 </DataTemplate>
118             </ItemsControl.ItemTemplate>
119             <ItemsControl.ItemContainerStyle>
120                 <Style>
121                     <Setter Property="Grid.Column"
122                             Value="{Binding Index}" />
123                 </Style>
124             </ItemsControl.ItemContainerStyle>
125
126         </ItemsControl>
127     </Grid>
128 </Window>

3 .cs代码如下

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }

    /// <summary>
    /// 统计项
    /// </summary>
    public class StatisticItem
    {
        public int Index { get; set; }

        public string Name { get; set; }

        public int Value { get; set; }
    }

    /// <summary>
    /// 统计项列表
    /// </summary>
    public class StatisticItemList : List<StatisticItem>
    {

    }

 4.GridHelper.Cs定义

    public class GridHelper
    {
        #region RowsCount 附加属性
        public static readonly DependencyProperty RowsCountProperty =
            DependencyProperty.RegisterAttached("RowsCount", typeof(int), typeof(GridHelper), new PropertyMetadata(1, RowsCountPropertyChangedCallback));

        public static void SetRowsCount(UIElement element, int value)
        {
            element.SetValue(RowsCountProperty, value);
        }

        public static int GetRowsCount(UIElement element)
        {
            return (int)element.GetValue(RowsCountProperty);
        }

        public static void RowsCountPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            int count = Convert.ToInt32(e.NewValue);
            if (sender is Grid && count > 0)
            {
                Grid g = sender as Grid;
                g.RowDefinitions.Clear();
                for (int i = 0; i < count; i++)
                {
                    g.RowDefinitions.Add(new RowDefinition());
                }
            }
        }
        #endregion

        #region ColumnsCount 附加属性
        public static readonly DependencyProperty ColumnsCountProperty =
            DependencyProperty.RegisterAttached("ColumnsCount", typeof(int), typeof(GridHelper), new PropertyMetadata(1, ClumnsCountPropertyChangedCallback));

        public static void SetColumnsCount(UIElement element, int value)
        {
            element.SetValue(ColumnsCountProperty, value);
        }

        public static int GetColumnsCount(UIElement element)
        {
            return (int)element.GetValue(ColumnsCountProperty);
        }

        public static void ClumnsCountPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            int count = Convert.ToInt32(e.NewValue);
            if (sender is Grid)
            {
                Grid g = sender as Grid;
                g.ColumnDefinitions.Clear();
                for (int i = 0; i < count; i++)
                {
                    g.ColumnDefinitions.Add(new ColumnDefinition());
                }
            }
        }
        #endregion
    }
时间: 2024-10-15 00:51:08

ItemsControl 使用Grid布局的相关文章

WPF中Grid布局

WPF中Grid布局XMAl与后台更改,最普通的登录界面为例. <Grid Width="200" Height="100" > <!--定义了两列--> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="100*"/> </Grid.Column

学习ExtJS的grid布局

这是之前学习ExtJS布局的时候我导师让我重点熟悉的内容.之后会发一个最近写的结合MVC项目的grid布局的案例. 上一篇关于ExtJS的学习资料什么的都已经更在上一篇了,这里只是对一些代码的记录. [学习资料](ExtJS4中的Grid.Tree.Form)http://www.cnblogs.com/niejunchan/p/4998512.html [效果] Array_Grid Tree_Grid [代码] [Array_Grid的代码] <!DOCTYPE html> <htm

[转]使用CSS3 Grid布局实现内容优先

使用CSS3 Grid布局实现内容优先 http://www.w3cplus.com/css3/css3-grid-layout-module.html 本文由大漠根据Rachel Andrew的<Giving Content Priority with CSS3 Grid Layout>所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点.如需转载此译文,需注明英文出处:http://24ways.org/2012/css3-grid-layout,以及作者相关信息

grid布局

css3新增flexbox布局的同时,也增加了grid布局: flex是一维布局,grid是二维布局:从长远来看,两者将结合,体现出强大功能: 参考: [1] flex&grid&圣杯布局 原文地址:https://www.cnblogs.com/RocketV2/p/8654761.html

grid 布局 属性示例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible"

css 中的grid布局基础

CSS Grid Layout为CSS引入了一个二维网格系统.网格可用于布局主要页面区域或小型用户界面元素. 网格是一组交叉的水平和垂直线 - 一组定义列,其他行.元素可以放在网格上,以行或者列为标准. grid布局的优点: 1:固定和灵活的轨道尺寸 2:可以使用行号,名称或通过定位网格区域将项目放置在网格上的精确位置.网格还包含一种算法,用于控制未在网格上显示位置的项目的放置. 3:在需要时添加其他行和列 4:网格包含对齐功能,以便我们可以控制项目放置到网格区域后的对齐方式,以及整个网格的对齐

Grid 布局管理器

Grid 布局管理器: Grid布局类wx.GridSizer,Grid布局以网格形式对子窗口或控件进行摆放,容器被分成大小相等的矩形,一个矩形中放置一个子窗口或控件. wx.GridSizer构造方法如下: wx.GridSizer(rows,cols,vgap,hgap). 创建制定函数和列数的wx.GridSizer对象,并制定水平和垂直间隙,参数hgap是水平间隙.添加的子窗口或控件个数不得超过rows*cols之积,否则容易引发异常 wx.GridSizer(rows,cols,gap

flex布局 、grid布局 (入门初体验)

两种布局都可以极大简化排版布局的步骤,都是直接作用于自己的排版(比如:现在 ul 上,ul>li 就会自动进行排版) flex布局:一般用于单行排版 display: flex; justify-content: space-evenly;//属性值可以在打印窗口调试,选择合适的. flex-flow: wrap-reverse;//属性值可以在打印窗口调试,选择合适的. grid布局:一般用于多行排版.单页排版....... .news>ul{ /*grid 布局*/ display: gr

Grid布局和Flex布局.md

Grid布局,还是Flex布局? 网格布局和Flex布局的差异? 有人认为:Flexbox用于一维布局,一行或一列.网格用于二维布局,多行和多列. 有的人认为:网格使用真实的列和行,内容会被一列一列.一行一行的排列.但是Flexbox没有,不仅是在二维里面,而且在一维里面也是如此.Flexbox并不适用于我们一直在使用的大部分功能. 大多数人认为:将Grid用于页面级布局,而将flexbox用于其他所有内容. 先回顾一下网格布局和Flex布局. 网格布局 采用网格布局的区域,称为"容器"