题
我有一个WPF DataTemplate,上面有两个TextBlock控件(堆叠),然后是下面的其他一些元素。由于一些复杂的布局代码,我需要知道两个文本嵌入元素的高度,以便我可以绘制一些精美的连接器线,并排列其他控件等。
如果我知道要进入文本块的文本,并且我知道字体等。是否有某种方法可以计算或测量这些文本块的高度而无需实际呈现它们?
解决方案
我认为打电话给 UIElement.Measure(Size)
方法,随后检查 UIElement.DesiredSize
财产。有关更多信息,请检查提供的MSDN链接。
其他提示
打电话 UIElement.Measure(Size)
, ,作为参数 Size
. 。第二个电话 UIElement.DesiredSize
返回任何东西 Size
你进入了 Measure
方法。
我认为是这样,因为 UIElement
(TextBlock
在这种情况下)不是任何控制的孩子,因此 DesiredSize
没有理由有所不同。
我感谢这是一个相当古老的问题,但是我发现使用以下代码
TextBlock textBlock = new TextBlock();
textBlock.Text = "NR valve";
Size msrSize = new Size(100, 200);
textBlock.Measure(msrSize);
Size dsrdSize = textBlock.DesiredSize;
dsrdsize返回为{47.05,15.96}。技巧似乎使MSRSizize大于预期的实际尺寸。 MSRSize似乎是所需()结果的限制。例如,使用msrsize =新大小(10,10),在此处导致{10,10}的dsrdsize。希望这对某人有帮助。
public static Size ShapeMeasure(TextBlock tb) {
// Measured Size is bounded to be less than maxSize
Size maxSize = new Size(
double.PositiveInfinity,
double.PositiveInfinity);
tb.Measure(maxSize);
return tb.DesiredSize;
}
public static Testit()
{
TextBlock textBlock = new TextBlock();
textBlock.Text = "NR valve";
Size text size = ShapeMeasure(textBlock);
}
不隶属于 StackOverflow