• 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
  • 相关阅读:
    GitHub代码阅读神器,你值有拥有!
    SpringBoot项目构建成jar运行后,如何正确读取resource下的文件
    基于SpringBoot-Dubbo的微服务快速开发框架
    基于SpringBoot的Web API快速开发基础框架
    野蛮生长的前端,从杂牌军到正规军
    让Redis突破内存大小的限制
    myeclipse 8.5-10.0 安装 svn 方法
    几秒后刷新页面
    不错的Spring学习笔记(转)
    Spring学习笔记(三)-类扫描的注解
  • 原文地址:https://www.cnblogs.com/Leaco/p/3191294.html
Copyright © 2020-2023  润新知