【问题标题】:Add a breakline in tooltip在工具提示中添加断线
【发布时间】:2011-11-17 16:37:53
【问题描述】:

¿如何在 XAML 的工具提示内的文本中添加断线?

我试试这个:

        <Label Name="label4" UseLayoutRounding="False" Focusable="False" AllowDrop="False" Foreground="Black" Margin="6,44,132.027,76" ToolTipService.ShowDuration="12000">
                <Label.ToolTip>
                    <ToolTip>
                    <TextBlock>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </TextBlock>
                    <TextBlock>Suspendisse eget urna eget elit ullamcorper tincidunt. Sed nec arcu sed ante sodales </TextBlock>
                    <TextBlock>Pellentesque elit libero, semper ac tincidunt vitae, euismod at ligula.</TextBlock>
                    </ToolTip>
                </Label.ToolTip>
            <Label.Content>
                <TextBlock TextAlignment="Right" TextWrapping="Wrap" Height="19" Width="108" >Lorem Ipsum</TextBlock>
            </Label.Content>
        </Label>

但不起作用:

【问题讨论】:

  • 是的,但没有很好的结果。按字面意思打印“\n”。

标签: wpf xaml tooltip


【解决方案1】:

我发现另一种有用的方法是在工具提示中嵌入&amp;amp;#x0a;。工具提示此时将有一个换行符。例如

ToolTip="Host name or IP address of the server. Click the &#x0a;Find Server button to help obtain the correct entry."

这使 xaml 代码更简洁,但可读性可能更低。更多详情请访问Newline in string attribute

【讨论】:

  • 如果我想显示 作为工具提示中的文本?
  • @TusharKukreti XAML 只是使用 XML/HTML 之类的实体,因此知道这一点,应该很容易发现您需要做的就是使用 &amp;amp; 转义 &amp; 字符( & 号) 得到&amp;amp;#x0a;.
  • @Tk1993 为什么要将其显示为文字文本?你有没有真正需要做这样的事情?
  • 这样做的缺点是,当您正在格式化代码并在工具提示文本很长并且您想将其分成几行时按 Enter 在代码中添加新行,这会导致诸如在显示的文本中添加大量空格等问题。但对于简短的 ToolTips,它非常简洁明了。
【解决方案2】:
<Label>
  <Label.ToolTip> 
     <TextBlock>
          Lorem ipsum dolor sit amet,
          <LineBreak /> 
          consectetur adipiscing elit. 
      </TextBlock> 
  </Label.ToolTip> 
</Label>
  ....

【讨论】:

  • 你的答案和瑞秋的答案有效,但我不知道哪个更好。
  • @Galled:取决于你想做什么。如果你只想有一些用cr格式化的文本,我的更好。格式化(线距、自动 Cr 等)的麻烦会更少。但是,在某些情况下,您明确需要多个 TextBlock。在这种情况下,Rachel 的解决方案更好。它取决于目标。对于您的 XAML 示例,我显然只需要一个 TextBlock。
  • 嘿克里斯(和所有人)。很好,我找到了这个问题和答案。你看,当我使用本地化时,我正在动态加载它的所有内容,我怎样才能在这个工具提示中插入一行?例如:comboBoxItemLightTheme.ToolTip = Lang.Language.toolTipVisualComboBoxThemeLight_PT; 从资源中加载一个字符串,假设这个工具提示有:Bacon ipsum dolor sit amet tri-tip boudin drumstick brisket leberkas pork loin shank。例如,如何在“Shank”之后添加换行符?
  • 警告:应该是ParentTag.ToolTip,如Label.ToolTip
  • @Malavos 在new question 中询问。 :)
【解决方案3】:

更紧凑:

<Label TooTip="Line1 &#10; Line2" />

【讨论】:

    【解决方案4】:

    将您的项目包装在 StackPanel 中,这会将它们堆叠在一起

    您现在拥有的内容无法编译,因为 ToolTips 只能有 1 个子对象,而您正在尝试添加 3 个

    <Label Name="label4" UseLayoutRounding="False" Focusable="False" AllowDrop="False" Foreground="Black" Margin="6,44,132.027,76" ToolTipService.ShowDuration="12000">
        <Label.ToolTip>
            <StackPanel>
                <TextBlock>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </TextBlock>
                <TextBlock>Suspendisse eget urna eget elit ullamcorper tincidunt. Sed nec arcu sed ante sodales </TextBlock>
                <TextBlock>Pellentesque elit libero, semper ac tincidunt vitae, euismod at ligula.</TextBlock>
            </StackPanel>
        </Label.ToolTip>
        <Label.Content>
            <TextBlock TextAlignment="Right" TextWrapping="Wrap" Height="19" Width="108" >Lorem Ipsum</TextBlock>
        </Label.Content>
    </Label>
    

    【讨论】:

    • 使用&lt;stackpanel /&gt; 与简单的&lt;textblock /&gt;&lt;linebreaks /&gt; 相比有什么好处?
    • @Galled 如果您只使用文本,则什么都没有。我实际上给了 HCL 的答案 +1,因为这是在文本字段中添加换行符的正确方法。如果您正在混合其他 UI 元素,或者您希望在每一行上使用特殊格式(我也使用它来说明您的代码示例无法编译的原因),您只想使用 StackPanel
    【解决方案5】:

    以上答案仅适用于 xaml 代码。如果要在 CS 代码中添加新行,请使用“Environment.Newline”

    label1.ToolTip="Line1" + Environment.NewLine + "Line2";
    

    【讨论】:

    • 快速评论,今天尝试使用这个解决方案,因为我需要在cs而不是xaml中设置它,并发现它拼写错误:Enviroment缺少一个'n'。应该是Environment。希望你能解决这个问题
    • Environment.Newline 应该是 Environment.NewLine(大写 L)
    【解决方案6】:

    你可以这样做:

    <Label>
    <Label.ToolTip>
        <TextBlock>  
          Line1
          <LineBreak/>
         Line2
      </TextBlock>
    </Label.ToolTip>
    </Label>
    

    【讨论】:

    • 已批准答案的副本
    【解决方案7】:

    这是换行方法的一种变体:

    <Label.ToolTip>
        <TextBlock>
            <Run Text=”Line1”/>
            <LineBreak/>
            <Run Text=”Line2”/>
        </TextBlock>
    </Label.ToolTip>
    

    这样做的好处是每一行都可以有自己的风格。

    【讨论】:

    • LineBreak不能在TextBox --&gt; ToolTip内部使用
    • 是的,我做到了。如果我们想讨论它,我们应该去聊天室。评论是错误的讨论场所
    • 改为显示您的代码。我刚刚在 VS2019 中对此进行了测试。如果你检查线程,Steven Muir 在 2011 年也说过同样的话。如果它在你的情况下不起作用,那么你的设置有问题。
    • Zam,您使用的是最新版本的 Visual Studio 吗?还是一些第三方 XAML 工具?如果是后者,它的 XAML 解析器可能不是最新的。此功能已推出多年。试用任何 Visual Studio 社区版本,免费下载。
    • 没有第三方工具。 VS2017 最新 SP。
    【解决方案8】:

    即使您正在寻找 XAML 解决方案 - 这里还有另一个 C# 解决方案:

    如果您计划将包括工具提示在内的字符串外包到资源文件 (.resx) - 例如用于多语言支持 - 您可以在此资源文件中的值中进行换行,例如使用 Shift+Enter 也会出现在视图中。

    【讨论】:

      【解决方案9】:

      例如从带有绑定后面的代码

      你可以使用这个类:

      Environment.NewLine
      

      像这样:

      labelName.Tooltip = $"line1 {Environment.NewLine} line2 {Environment.NewLine} line3";
      

      【讨论】:

        【解决方案10】:

        还有不同的方法。您可以告诉 XAML 您希望保持与您写下的间距相同的间距。这可以通过将属性 xml:space="preserve" 设置为父元素 - see MSDN page 来完成。

        <Label>
          <Label.ToolTip>
            <ToolTip xml:space="preserve">My main line,
        main line on 2nd row.
        
        another line with space in between         and some spacing.</ToolTip>
          </Label.ToolTip> 
        </Label>
        

        这还允许您使用相邻的新行、制表符和多个空格,它们不会被删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 1970-01-01
          • 2014-11-23
          • 2020-10-08
          相关资源
          最近更新 更多