我有一个上面有几个形状的Controls.Canvas
,想要添加以给定点为中心的文本标签(我正在绘制一个带有标签顶点的树)。在WPF中以编程方式完成此操作的最简单方法是什么?
我尝试过设置RenderTransform
和调用Controls.Canvas.SetLeft
等,但都没有将标签放在我想要的位置。WPF似乎只支持在给定的左、右、上、下坐标上定位,而不是在给定的坐标上居中,并且在构造Canvas
时,Width
属性为NaN
,ActualWidth
属性为0.0
。
发布于 2018-12-23 08:33:16
要使文本在给定区域(比如矩形)居中,您可以简单地使用Grid
对其进行换行。请参见this answer中的示例。可以使用Left
、Top
、Width
和Height
属性将网格放置在画布内的任何位置。文本将始终位于网格的中心。
此逻辑可以封装在自定义FrameworkElement like this中。
要使文本在(x, y)
点居中,您可以计算相应的矩形:
var text = new CenteredTextBlock
{
Text = "Hello",
Width = maxWidth,
Height = maxHeight,
};
Canvas.SetLeft(text, x - maxWidth / 2);
Canvas.SetTop(text, y - maxHeight / 2);
Canvas.Children.Add(text);
其中,(maxWidth, maxHeight)
是允许的最大文本大小。
https://stackoverflow.com/questions/9778294
复制相似问题