我有这个问题。我需要知道Label尝试使用的大小,但由于包含它的控件小于实际标签,当我调用label.ActualWidth时,我真正得到的是所述容器控件的宽度。有没有办法获得标签所需的宽度以适应其内容(忽略其ACTUAL宽度)?像label.RequiredWidth,label.DesiredSize.Width或label.ActualWidth都没有。
以下是我正在尝试的内容:
XAML:
<StackPanel Width="100">
<Label x:Name="aLabel">Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text </Label>
</StackPanel>
C#:
aLabel.ActualWidth; // this is 100 like the StackPanel
aLabel.DesiredSize.Width; // also 100 like the StackPanel
谢谢。
答案 0 :(得分:3)
以下是答案:
lb1.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
var requiredSize = lb1.DesiredSize;
请注意,这不会为您执行任何自动文本换行。
答案 1 :(得分:1)
执行此操作的一种方法是使用字形宽度来测量文本的长度。以下方法实现了:
public static double GetGlyphRunWidth(Typeface typeface, string text, int fontSize)
{
GlyphTypeface glyphTypeface;
if (!typeface.TryGetGlyphTypeface(out glyphTypeface))
return 0;
ushort[] glyphIndexes = new ushort[text.Length];
double[] advanceWidths = new double[text.Length];
double totalWidth = 0;
for (int n = 0; n < text.Length; n++)
{
ushort glyphIndex = glyphTypeface.CharacterToGlyphMap[text[n]];
totalWidth += glyphTypeface.AdvanceWidths[glyphIndex] * fontSize;
}
return totalWidth;
}