在XAML中设置TextBlock的最大字符长度

17

我该如何在xaml中设置用户在TextBlock中输入的字符数的限制?

这个限制是在Model中设置还是创建某种自定义属性来处理它?


这个回答解决了你的问题吗?你可以限制WPF TextBlock中可见文本的长度吗? - StayOnTarget
5个回答

14

TextBlock没有MaxLength属性,Label也没有。而TextBox有这个属性。除非你已经修改了它,否则用户无法在TextBlock中输入。

你真的想限制的是TextBlock吗?还是你想要限制的是TextBox?如果是TextBox,你可以简单地使用MaxLength属性。

<TextBox Name="textBox1" MaxLength="5" />

如果你使用了 TextBlock 并且允许用户在其中输入数据,那么请改用 TextBox。如果你想要的是 TextBlock 的样式,可以将 TextBox 样式设置为类似于 TextBlock。


MaxLength不起作用。用户可以输入超过5个字符。 - Willy
你确定你有一个带样式的TextBox而不是TextBlock吗? - Rhyous

11

如果不创建自定义控件,您有几个选择。

您可以尝试调整TextBlock的大小以完全适合您预期的文本,但是这很快就会变得丑陋,因为需要考虑到不同的输入或不同的字体大小。

相反,您可以验证要分配给TextBlock.Text属性的字符串的字符长度,并在必要时进行限制。

string s = "new text";
if (s.Length > maxLen)
    textBlock1.Text = s.Substring(0, maxLen);
else
    textBlock1.Text = s;

另一种选择是使用TextWrappingTextTrimming属性。下面的属性可以添加到你的TextBlock XAML中,用于添加换行和“…”来表示文本超出了TextBlock的大小。

<TextBlock ... TextWrapping="Wrap" TextTrimming="CharacterEllipsis" />

5
你可以使用TextBlock的 "TextTrimming" 属性。将 TextTrimming 设置为 "CharacterEllipsis"。你可能需要调整
Width
来管理实际想要显示的字符数。
<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding Subject}"/>

1

要么设置MaxHeight = "SomeHeight"并修剪溢出内容,使用

<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding LongText}"

或者像设置TextBlock那样使用TextBox,通过设置

<TextBox IsReadOnly="True" Background="Transparent" BorderThickness="0"
 MaxLength="100"

0
另一种方法是使用StringFormat对所显示的字符串进行格式化。
例如,我想显示一个小数x,但只想显示小数点后的5位数字。
<TextBlock Text="{Binding x, StringFormat={}{0:F5}}"/>

查看使用StringFormat将字符串添加到WPF XAML绑定以获取更多示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接