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;
}
}

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

感谢每一位阅读此篇文章的人,希望可以帮到你。

2017年7月12日更新:

忘了当初为什么这么做了,好尴尬。但这么做的一个思想是文本区域大小计算吧。

发现wpf的textblock自带行高计算的。

只要将所有colume设置成模板列,textwrap属性设置成wrap就行了,这样也是可以的。测试程序源码如下:

http://files.cnblogs.com/files/lizhijian/datagrid%E8%A1%8C%E9%AB%98%E6%B5%8B%E8%AF%95.rar

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

  1. WPF DataGrid row background converter datagrid 行背景随绑定数据变化,转换器

    <DataGrid Grid.Row=" ItemsSource="{Binding SalesList,UpdateSourceTrigger=PropertyChange ...

  2. wpf DataGrid加载行号

    <DataGrid Name="tkdg" HorizontalContentAlignment="Center" AutoGenerateColumns ...

  3. WPF DataGrid获取选择行的数据

    在WPF中,单击DataGrid,如何获取当前点击的行? 比如在MouseDoubleClick事件中,事实上获取的选中行是一个DataRowview,你可以通过以下的方法来获取选中行的数据,需要引用 ...

  4. wpf datagrid row的命中测试

    1. 添加鼠标左键处理 AddHandler(DataGrid.MouseLeftButtonDownEvent, new RoutedEventHandler(grdStudyList_MouseL ...

  5. wpf datagrid 如何自定义行的控件实例,(textbox 并选中则全选)

    主要是为了用户输入方便 按回车,选中下一列,text自动获取焦点,输入状态 获取控件实例  https://blog.csdn.net/m15188153014/article/details/486 ...

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

    原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄 ...

  7. WPF DataGrid 绑定行双击行命令

    WPF DataGrid 绑定行双击行命令 <DataGrid ...> <DataGrid.InputBindings> <MouseBinding MouseActi ...

  8. WPF DataGrid 双击行 获得绑定数据

    原文:WPF DataGrid 双击行 获得绑定数据 1)增加事件 2)增加对象获取 1)事件代码 Datagrid 增加事件 MouseDoubleClick="dataGrid_Mous ...

  9. WPF DataGrid自定义样式

    微软的WPF DataGrid中有很多的属性和样式,你可以调整,以寻找合适的(如果你是一名设计师).下面,找到我的小抄造型的网格.它不是100%全面,但它可以让你走得很远,有一些非常有用的技巧和陷阱. ...

随机推荐

  1. GSS4 - Can you answer these queries IV(线段树懒操作)

    GSS4 - Can you answer these queries IV(线段树懒操作) 标签: 线段树 题目链接 Description recursion有一个正整数序列a[n].现在recu ...

  2. Spring框架学习笔记(5)——自动装配

    1.通过bean标签的autowire属性可以实现bean属性的自动装配. 创建一个新的Spring配置文件beans-autowire.xml,这里我们配置了3个bean,Address.Car.P ...

  3. 多文件中的static

    这里借鉴一篇文章:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html#undefined 在这里举个例子,先和你说说 ...

  4. css3渐变之线性渐变

    css3定义了两种类型的渐变,即线性渐变和径向渐变.这里我要说的是线性渐变. 为了创建一个线性渐变,你必须至少定义两种颜色结点.颜色结点即你想要呈现平稳过渡的颜色.同时,你也可以设置一个起点和一个方向 ...

  5. java中类的加载过程和对象的创建过程

    1.类加载过程 首先,jvm在执行时,遇到一个新的类,会先去内存的方法区中去寻找该类的.class文件,如果找到了就直接运行,如果没有找到,则会去硬盘中去寻找该类的.class文件,并将该类文件加载到 ...

  6. 【学习笔记】js下拉刷新、上拉加载 mescroll框架的使用

    写在前边: 工作需要,使用ajax在原来的列表下边使用ajax请求后台数据,拼接在列表最下边,在github转了好久,发现了一个bug极多的js刷新插件,尝试了一个下午,就在快放弃的时候,发现下边有留 ...

  7. dedecms下的tplcache模板缓存文件过多怎么清理?

    时间:2016-04-18 09:32来源:www.ucbug.cc作者:网络 相信很多站长,或者seoer人员在备份用dedecms程序开发的网站时,发现下载到tplcache这个文件夹内容时候花了 ...

  8. dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全

    文章来源:小灰博客| 时间:2013-10-30 13:40:21| 作者:Leo | 1 条评论 文章分类:IT技术分享.PHP     标签: dedecms 今天偶尔发现给一篇dede下的长文章 ...

  9. 小白的Python之路 day5 hashlib模块

    hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ...

  10. java利用poi生成/读取excel表格

    1.引入jar包依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...