wpf datagrid row height 行高自动计算使每行行高自适应文本

wpf 的datagrid的行高 要么是Auto,要么是定值:但会带来麻烦就是每行行高都一样。

当需要按内容(主要是wrap 换行的textbox或textblock)来动态调整行高的时候,需要用到dataGrid的LoadingRow 事件。

参考两个网页:

http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters

http://www.codeproject.com/Articles/5521/Advanced-DataGrid-sizing

代码注释详细,不做细谈。

代码如下:

 private void dgList_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Height = 30;
            //粗略计算行高。为了更好的显示效果
           ContentInfo info = (ContentInfo)e.Row.DataContext;
            if (info != null)
            {
                //计算最大长度的文本
                string maxLengthString = info.name1.Length > info.name2.Length ? info.name1: info.name2;
                //获取换行文本的文本框宽度,即template里面的textbox或textblock的实际宽度
                double textBoxWidth = (this.ActualWidth - 300) / 2;

                var formattedText = new FormattedText(
    maxLengthString ,
    CultureInfo.CurrentUICulture,
    FlowDirection.LeftToRight,
    new Typeface(new FontFamily("微软雅黑"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal),
    12,
    Brushes.Black);

                double calculateHeight = formattedText.Height * (formattedText.Width / textBoxWidth);
                e.Row.Height = 30 > calculateHeight ? 30 : calculateHeight;
            }
        }

效果(每行行高都不一样,自适应了):

转载请注明出处,谢谢。 有问题请联系:[email protected]

时间: 2024-12-25 04:55:06

wpf datagrid row height 行高自动计算使每行行高自适应文本的相关文章

WPF DataGrid获取选择行的数据

在WPF中,单击DataGrid,如何获取当前点击的行? 比如在MouseDoubleClick事件中,事实上获取的选中行是一个DataRowview,你可以通过以下的方法来获取选中行的数据,需要引用system.IO 和System.Data; var a =this.exDataGrid.selectItem; var b= a as DataRowView; 或者var b=(DataRowView) exDataGrid.selectItem b["FiledName"].To

wpf DataGrid加载行号

<DataGrid Name="tkdg" HorizontalContentAlignment="Center" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" LoadingRow="tkdg_LoadingRow"> ..... 后台直接 private void

在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色

原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄小于18岁的,该行为红色显示,如何做到 解决方法 1: 在你需要加载的键入代码,我一般放在TabControl的selected事件中 ?Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.ApplicationIdle, new Action(方法名)); ? 我个人定义了一个方法 ?for (i

WPF DataGrid 每行ComboBox 内容不同的设置方法

原文:WPF DataGrid 每行ComboBox 内容不同的设置方法 <toolkit:DataGridComboBoxColumn x:Name="DgCbcSignal" Header="信号源" SelectedItemBinding="{Binding SelectedSignal}" > <toolkit:DataGridComboBoxColumn.ElementStyle> <Style Targe

WPF DataGrid 双击行 获得绑定数据

原文:WPF DataGrid 双击行 获得绑定数据 1)增加事件 2)增加对象获取 1)事件代码 Datagrid 增加事件 MouseDoubleClick="dataGrid_MouseDoubleClick" private void dataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { DataGrid datagrid = sender as DataG

WPF DataGrid自定义样式

WPF DataGrid自定义样式 微软的WPF DataGrid中有很多的属性和样式,你可以调整,以寻找合适的(如果你是一名设计师).下面,找到我的小抄造型的网格.它不是100%全面,但它可以让你走得很远,有一些非常有用的技巧和陷阱. 在DataGrid中的最高水平,你可以改变的外观和感觉,通过设置一些: Property Type Values Default AlternatingRowBackground Brush Any Brush Null Background Brush Any

WPF DataGrid 之数据绑定

1. Auto generation of columns 最简单的方法莫过于让DataGrid根据数据源中的字段自动生成列了: 根据实体类的公共属性, 能够自动生成四种类型的数据列,对应关系如下: TextBox columns for string values; CheckBox columns for boolean values; ComboBox columns for enumerable values; Hyperlink columns for Uri values; 拖个Da

WPF DataGrid常用属性记录

WPF DataGrid常用属性记录 组件常用方法: BeginEdit:使DataGrid进入编辑状态. CancelEdit:取消DataGrid的编辑状态. CollapseRowGroup:闭合DataGrid的行分组. CommitEdit:确认DataGrid的编辑完成. ExpandRowGroup:展开DataGrid的行分组. GetGroupFromItem:从具体Item中得到分组. ScrollIntoView:滚动DataGrid视图. 组件常用属性: Alternat

WPF DataGrid自动生成行号

在使用WPF进行应用程序的开发时,经常会为DataGrid生成行号,这里主要介绍一下生成行号的方法.通常有三种方法,这里主要介绍其中的两种,另一种简单提一下. 1. 直接在LoadingRow事件中操作. 这种方式是在code behind文件中操作.即相应的*.xaml.cs文件. 代码如下: this.dataGridSoftware.LoadingRow += new EventHandler<DataGridRowEventArgs>(this.DataGridSoftware_Loa