zoukankan      html  css  js  c++  java
  • C#/WPF 计算字串的真实长度,调整控件的宽度

    下面函数是经常用到的计算字串长度的方法:

            private double MeasureTextWidth(String str, string fontName, double fontsize, double width)
            { 
                double width = -1;     
                try
                {
                    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(m_hWnd);
                    graphics.PageUnit = System.Drawing.GraphicsUnit.Point;
                    System.Drawing.Font font = new System.Drawing.Font(fontName, (float)fontsize);

                    System.Drawing.SizeF size = graphics.MeasureString(str, font);

                    width = size.width;

                    font.Dispose();
                    graphics.Dispose();
                }
                catch (System.Exception e)
                {
                }
                return width;
            }

    但是事实上,Graphics.MeasureString并不可靠,在不同的SKU下得到的结果会不同,原因不明,可能跟显卡驱动也会有关系。今天尝试新的方法经测试有效,贡献出来:

            private double MeasureTextWidth(string text, double fontSize, string fontFamily)
            {
                FormattedText formattedText = new FormattedText(
                text,
                System.Globalization.CultureInfo.InvariantCulture,
                FlowDirection.LeftToRight,
                new Typeface(fontFamily.ToString()),
                fontSize,
                Brushes.Black
                );
                return formattedText.WidthIncludingTrailingWhitespace;
            }

    另,附送枚举已安装字体的方法:

                    System.Drawing.FontFamily[] fontFamilies;
                    InstalledFontCollection installedFontCollection = new InstalledFontCollection();
                    fontFamilies = installedFontCollection.Families;

                    int count = fontFamilies.Length;
                    log("fontFamilies.Length=" + fontFamilies.Length);
                    for (int i = 0; i < count; i++)
                    {
                        fontName = fontFamilies[i].Name;
                        log("fontName: " + fontName);
                    }

     
    参考自:http://zwkufo.blog.163.com/blog/static/258825120116663748213/
  • 相关阅读:
    Redis闪退解决办法
    excel导入数据库,存在则更新不存在添加
    sql取逗号前后数据与批量修改某一字段某一值
    sql查询一个字段不同值并返回
    表格加边框
    图论算法-求(有向)图中任意两点间所有路径
    Java实时监控日志文件并输出 转
    ResultSet的记录数  转
    eclipse中显示“编辑器中没有main类型
    压缩
  • 原文地址:https://www.cnblogs.com/chuhaida/p/5610061.html
Copyright © 2011-2022 走看看