zoukankan      html  css  js  c++  java
  • WPF DataGrid 自动生成行号的方法(通过修改RowHeaderTemplate的方式)

    WPF中的DataGrid自动生成行号的方法有很多,这里记录了一种通过修改 RowHeaderTemplate的方式来生成行号:

    方法一:

    xaml界面:

    <Window
        ...
        xmlns:local="clr-namespace:Test"
        DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
        <Window.Resources>
            <local:RowToIndexConv x:Key="RowToIndexConv"/>
        </Window.Resources>
            <DataGrid ItemsSource="{Binding GridData}">
                <DataGrid.RowHeaderTemplate>
                    <DataTemplate>
                        <TextBlock Margin="2" Text="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={StaticResource RowToIndexConv}}"/>
                    </DataTemplate>
                </DataGrid.RowHeaderTemplate>
            </DataGrid>
    </Window>

    其中的Converter代码:

    public class RowToIndexConv : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DataGridRow row = value as DataGridRow;
            return row.GetIndex() + 1;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

    这样就ok了。。

    这种方法的好处是方便更好的自定义表头样式

    还有一个作者也觉得好用的方法,是通过为DataGrid添加一个Behavior,但是这个方法不好扩展表头的样式。

    方法二:

    public class DataGridShowRowIndexBehavior
    {
        public static bool GetShwoRowIndex(DependencyObject obj)
        {
            return (bool)obj.GetValue(ShowRowIndexProperty);
        }
    
        public static void SetShowRowIndex(DependencyObject obj,bool value)
        {
            obj.SetValue(ShowRowIndexProperty,value);
        }
    
        public static readonly DependencyProperty ShowRowIndexProperty = DependencyProperty.RegisterAttached("ShowRowIndex",typeof(bool),typeof(DataGridShowRowIndexBrhavior),new UIPropertyMetaData(false,ShowRowIndexPropertyChanged));
    
        private static void ShowRowIndexPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
        {
            var dataGrid= d as DataGrid;
            if (dataGrid==null) return ;
            dataGrid.LoadingRow+=
                delegate(object sender,DataGridRowEventArgs e1)
                    {
                        e1.Row.Header=e1.Row.GetIndex()+1;
                    };
        }
      
    }

    然后在DataGrid上添加该Behavior就可以了。

    <DataGrid Behavior:DataGridShowRowIndexBehavior.ShowRowIndex="True"/>

    但是这个方法就只能显示出来,要是表头想在数字后面加一个图片,这就没第一种方法好用了。

    欢迎转载,请注明来自Leaco的博客http://www.cnblogs.com/Leaco/p/3191294.html 

    欢迎转载,转载请注明来自 Leaco 的博客:http://www.cnblogs.com/Leaco
  • 相关阅读:
    各浏览器都支持的渐变
    ajax get 和 post
    jQuery给input绑定回车事件
    Thinkpad BIOS里的五个选项设置介绍(转)
    对象的比较与排序(一):类型比较和值比较(转)
    C# 压缩Access数据库(转)
    Firefox 删除插件
    Python进制转换(二进制、十进制和十六进制)
    程序在他人电脑上报缺失msvcr100d.dll 处理(转)
    DataGridView实现双缓冲(转)
  • 原文地址:https://www.cnblogs.com/Leaco/p/3191294.html
Copyright © 2011-2022 走看看