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

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

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

    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

  • 相关阅读:
    HashSet源码分析
    Mysql的体系结构和存储引擎
    触发器
    存储过程和函数
    索引
    SpringBoot 中的日志使用
    log4j2
    Logback
    slf4j
    日志门面
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/5554783.html
Copyright © 2020-2023  润新知