Как мне получить объект WPF Canvas для рендеринга TextBlock и Polygon в одной и той же позиции?Я пытаюсь наложить 2D-метки на 3D-сцену, но хотя фоны Polygon заканчиваются в нужных местах, TextBlocks не ...
Вы можете увидеть результаты здесь.
(я знаю, что было бы лучше использовать объекты Границы вместо полигонов, но они также не правильно позиционируются!)
Вот код, который я использую, чтобы попробовать и сделатьэто:
foreach (Block block in blocks)
{
GeneralTransform3DTo2D transform = block.Top.TransformToAncestor(viewport);
GeometryModel3D model = block.Top.Content as GeometryModel3D;
MeshGeometry3D geometry = model.Geometry as MeshGeometry3D;
Point corner1 = transform.Transform(geometry.Positions[geometry.TriangleIndices[0]]);
Point corner2 = transform.Transform(geometry.Positions[geometry.TriangleIndices[1]]);
Point middle = new Point(corner1.X / 2 + corner2.X / 2, corner1.Y / 2 + corner2.Y / 2);
Polygon polygon = new Polygon();
polygon.Stroke = Brushes.DimGray;
polygon.Fill = Brushes.LightGray;
polygon.Points.Add(new Point(middle.X - 15, middle.Y - 15));
polygon.Points.Add(new Point(middle.X + 15, middle.Y - 15));
polygon.Points.Add(new Point(middle.X + 15, middle.Y + 15));
polygon.Points.Add(new Point(middle.X - 15, middle.Y + 15));
labelHolder.Children.Add(polygon);
TextBlock text = new TextBlock();
text.Text = block.Text;
text.Width = 30;
text.Height = 30;
text.TextAlignment = TextAlignment.Center;
text.FontSize = 11;
Canvas.SetLeft(text, middle.X - 15);
Canvas.SetBottom(text, middle.Y - 15);
labelHolder.Children.Add(text);
}
Буду очень признателен, если вы поможете мне взять под контроль мой холст, спасибо!