0

我在 WPF 中有一个带有很多标签的图表。这些标签上的文本是动态加载的,可能会发生变化。如果我将宽度设置为自动,那么这些标签可能会重叠,这会使文本不可读。

该图表支持多种尺寸,因此如果它变大,则条形图会重新调整大小并且有更多的文本空间。现在我想将文本调整为可用的空间。如果它变得太小,我不想再显示标签(工具提示可用,因此用户仍然可以获得所需的信息)。考虑字符串“Case 1, blah blah”,可能没有足够的空间来显示整个字符串,而只能显示第一个单词。在这种情况下,我希望字符串为“Case 1..”,其中 .. 表示工具提示中有更多信息。

我可以确定字符串可用的长度。但是我如何确定单个字母所占用的空间?当然,我也可以只调整标签的大小,但它会在任何地方切断字符串,这可能对用户没有帮助(而且看起来很丑)。

有任何想法吗?

4

2 回答 2

1

如果您可以使用 TextBlocks 而不是标签,那么它们有一个TextTrimming属性,它将为您执行此操作到最近的字符或最近的单词。


虽然您似乎对 TextTrimming 属性感到满意,但我将对其进行编辑以添加 TextBox 控件具有GetRectFromCharacterIndex方法,只要字体设置与您的标签匹配,您就可以在屏幕上找出一个或多个字符的大小。如果您想在标签中的特定位置而不是最近的字符/单词进行修剪,这可能很有用。

于 2009-05-11T11:53:36.147 回答
0

不是 WPF 专家,但我认为您需要在代码而不是 XAML 中执行此操作。

首先获取文本可用空间的实际像素宽度。然后查看 XAML 前端使用的字符集、点间距等,并从那里计算每个字符所需的像素宽度。

您还可以查看更改字符大小以及减少标签长度。

于 2009-05-11T11:41:09.557 回答