LunarPresentation/Converts/MaxWidthConverter.cs

(完整代码) 2KB

using System;
using System.Globalization;
using System.Windows.Data;
using SHomeWorkshop.LunarPresentation.Interfaces;

namespace SHomeWorkshop.LunarPresentation.Converts
{
    public class MaxWidthConverter : IMultiValueConverter
    {

        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values.Length == 6)
            {
                AutoWrapType selfAutoWrap = (AutoWrapType)values[4];
                bool docAutoWrap = (bool)values[3];
                double fontSize = (double)values[0];
                double wndWidth = (double)values[1];
                int indent = (int)values[2];

                if ((selfAutoWrap == AutoWrapType.FromDoc && docAutoWrap == true) ||
                    selfAutoWrap == AutoWrapType.Wrap)
                {
                    double result = wndWidth - (indent + 1) * 2 * fontSize;
                    //文本块如果缩进是五级的话的,最大宽度为主窗口的实际宽度减去12字宽。
                    //字符的宽度由正文的字号决定,正文字号即是编辑器的默认基准字号。
                    //这是考虑到标题有4级,再加1级正文,每级缩进2字宽,共计10字宽。
                    //又主窗口还有边距,这样12字就差不多了。

                    if (result < 200)
                    {
                        return 200;
                    }
                    else
                    {
                        double editorMaxTextWidth = (double)values[5];
                        if (result > editorMaxTextWidth)
                        {
                            return editorMaxTextWidth;
                        }
                        else
                        {
                            return result;
                        }
                    }
                }
                else
                {
                    return Double.PositiveInfinity;//如果不自动折行,则不限制宽度。PositiveInfinity,正无穷。
                }
            }
            else return Double.PositiveInfinity;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            return null;
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。