【问题标题】:Automatic line break in WPF labelWPF 标签中的自动换行符
【发布时间】:2010-03-19 15:03:47
【问题描述】:

WPF Label 是否可以自动拆分为多行?在下面的示例中,文本在右侧被裁剪。

<Window x:Class="..." xmlns="..." xmlns:x="..." Height="300" Width="300">
    <Grid>
        <Label>
            `_Twas brillig, and the slithy toves did gyre and gimble in the wabe:
            all mimsy were the borogoves, and the mome raths outgrabe.
        </Label>
    </Grid>
</Window>

我是不是做错了什么?

不幸的是,采用其他控件不是一个好的选择,因为我需要访问键的支持。

Label 替换为TextBlock(具有TextWrapping="Wrap"),并调整其控制模板以识别访问键可能是一种解决方案,但这不是矫枉过正吗?

编辑:标签的非标准样式会破坏蒙皮,所以如果可能的话,我想避免它。

【问题讨论】:

  • 使用 TextBlock 代替 Label 似乎是一个简单的解决方案。如果它有效并且不会显着增加代码的大小,它并不过分。有时使用 WPF,不清楚为什么存在某些东西,比如为什么同时有 Label 和 TextBlock,而在所有相关情况下都可以只使用 TextBlock。
  • @kmontgom:确实TextBlockLabel 是不同的野兽:请参阅一篇关于它的好文章joshsmithonwpf.wordpress.com/2007/07/04/…。我认为必须有一个比替换控件模板更简单的解决方案(例如,因为这可能会破坏蒙皮)。
  • 感谢您的链接。好点。这告诉我,也许应该将换行功能添加到 的功能
  • @kmontgom:不客气。就我而言,我也认为不允许标签更高级是没有意义的。

标签: .net wpf wpf-controls line-breaks


【解决方案1】:

同时使用 Label 和 TextBlock 似乎是正确的答案。 There's a howto located here that demonstrates this exact issue.

具体来说,在他们的示例中,获取换行文本和访问密钥:

<Label Width="200" HorizontalAlignment="Left"
       Target="{Binding ElementName=textBox1}">
  <AccessText TextWrapping="WrapWithOverflow">
    _Another long piece of text that requires text wrapping
    goes here.
  </AccessText>
</Label>

【讨论】:

  • @Ben:在你的回答中,s/TextBlock/AccessText/ :-)
  • @Vlad,我怀疑这是真的,但我确实从 MSDN 复制粘贴了它。我想真正的答案是永远不要相信 MSDN。 :)
  • 是的,最好先尝试。 :)
  • 完全错了……最好先阅读 MSDN,然后再自己尝试。第 1 步:获取知识 第 2 步:根据您的情况调整知识 第 3 步:???????????第 4 步:获得优势(利润)
猜你喜欢
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2012-03-19
相关资源
最近更新 更多