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
  • 相关阅读:
    【珍惜时间】 vant-finance-mobile
    【珍惜时间】h5-tzl
    利用popstate事件和window下的history对象处理浏览器跳转问题
    在salesforce中如何获取Security Token
    加密与安全:非对称加密算法 RSA 1024 公钥、秘钥、明文和密文长度
    Android studio:URI is not registered 的解决办法
    解决support包引起的AndroidStudio编译报错
    解决Invalid Plugin needs a valid package.json
    Android Studio Error:Execution failed for task ':app:compileDebugJavaWithJavac' 根本解决方法
    Android Studio 3.0——unable to resolve dependency for cordovalib
  • 原文地址:https://www.cnblogs.com/Leaco/p/3191294.html
Copyright © 2011-2022 走看看