• XAML中的空格、换行、Tab


    由于XAML是一种XML,在里面写段文字都经常会遇到问题。

    * 空格

    关于XAML中是如何处理空格的,MSDN上给出了详细的描述:http://msdn.microsoft.com/en-us/library/cc189036%28v=VS.95%29.aspx#whitespace

    摘重要的简单说一下:

    1. 空格、回车、制表符都被当做空格。
    2. 连续的空格会被合并为一个空格。
    3. <tag>后紧邻的空格会被忽略。</tag>前紧邻的空格会被忽略。换句话说,解析器对<tag>…</tag>中间的字符串做Trim。

    如何保留空格

    1. 给元素加上属性 xml:space="preserve"
      设置了这个属性之后,会保留元素中所有的空格,不会合并连续空格,也不会trim两头的空格。
      这个方法有个不便,就是它会保留元素中所有的空格,哪怕这些空格是由代码格式规整化后产生的。这就意味着,你不能用ctrl+E,F这样的快捷键来整理代码格式了,一旦不小心整理了,改回来都很麻烦。
    2. &#160;
      因为XAML支持直接写Unicode代码,这串代码代表一个non breaking space.

    复杂的文本

    带有复杂格式的文本,建议使用RichTextBox。

    因为文本元素分为block和inline两种,TextBlock仅允许包含inline,所以用来展示少量的文本比较合适。

    如果格式比较复杂,注意用好span,span与run的不同在于,span不会继承父元素的格式,相当于重置格式,不受父元素格式的影响。

     

    * 换行

    在XAML中输入回车会被当做一个空格,所有换行要用<LineBreak/>。

    另外,两个Run相邻,如果是如下排列:

    <Run>ab</Run>

    <Run>cd</Run>

    则显示成:

    ab

    cd

    会自动在两个Run之间加上换行符。

    如果要让回车去掉,显示成abcd,则应该写在一行里:

    <Run>ab</Run><Run>cd</Run>

    * Tab

    首先,XAML中没有tab,只能用连续的空格来代替。

    需要注意,在将一个string赋值给RichTextBox的Xaml属性时,会合并掉连续的空格,所有如果要保留tab(连续的空格),需要进行这样一个workaround:

    private const string TAB = "    ";
    private const string TAB_PLACEHOLDER = "===TAB===";
    
    textBox1.Text = richTextBox1.Xaml;
    string xaml = richTextBox1.Xaml;
    
    xaml = xaml.Replace(TAB, TAB_PLACEHOLDER);
    
    richTextBox2.Xaml = xaml;
    
    foreach (Block block in richTextBox2.Blocks)
    {
        foreach (Inline inline in ((Paragraph)block).Inlines)
        {
            ((Run)inline).Text = ((Run)inline).Text.Replace(TAB_PLACEHOLDER, TAB);
        }
    }
    

    先用一个占位符来代替四个空格,这样在给richTextBox的xaml属性赋值的时候就不会合并空格了。

    然后再替换这个占位符,赋完值替换的时候不会进行合并。

  • 相关阅读:
    javase程序设计上机作业2
    操作系统课堂笔记——01,操作系统介绍
    javase程序设计上机作业1
    Matlab学习笔记1—MATLAB基础知识
    Matlab学习笔记0—课程导入
    【转】WEB技术发展简史
    leetcode-79-单词搜索(用dfs解决)
    leetcode-78-子集(用bfs解决)
    leetcode-74-搜索二维矩阵
    leetcode-46-全排列
  • 原文地址:https://www.cnblogs.com/dc10101/p/2248432.html
Copyright © 2020-2023  润新知