我正在学习WPF,并试图将多边形的集合动态绘制到画布上。
我按如下方式配置多边形:
mHexagon = new Polygon();
mHexagon.Width = Diameter * 2;
mHexagon.Height = Diameter * 2;
mHexagon.StrokeThickness = 1;
mHexagon.Stroke = Brushes.AliceBlue;
mHexagon.Points = new PointCollection(Vertices.Select(v => new Point(v.X, v.Y)));
示例点集:
顶点
:128,64
:96,8.57437415779593
:32,8.57437415779592
:0,64
:32,119.425625842204
:96,119.425625842204
我按如下方式添加多边形(封装在Hexagon
类中):
PlayerMapWindow.Children.Add(hex.Polygon);
我的XAML看起来像:
<Border BorderThickness="1"
BorderBrush="DarkRed"
Background="Black"
Padding="2">
<Viewbox Name="PlayerMapViewbox"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Canvas Name="PlayerMapWindow"/>
</Viewbox>
</Border>
将多边形(十六进制)添加到画布子项后,不会绘制任何内容。
答案 0 :(得分:2)
删除 ViewBox
,您的代码可以正常使用。
<Border BorderThickness="1"
BorderBrush="DarkRed"
Background="Black"
Padding="2">
<Canvas Name="PlayerMapWindow"/>
</Border>
Canvas的默认高度和宽度设置为0 。如果您想要ViewBox的缩放功能,则必须约束画布的宽度和高度。
<Border BorderThickness="1"
BorderBrush="DarkRed"
Background="Black"
Padding="2">
<Viewbox Name="PlayerMapViewbox"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Canvas Name="PlayerMapWindow" Width="300" Height="300"/>
</Viewbox>
</Border>
来自MSDN:
Canvas是唯一没有固有布局的面板元素 特点。 Canvas具有默认的高度和宽度属性 零,除非它是自动调整大小的元素的子元素 它的子元素。画布的子元素永远不会调整大小,它们 只是位于他们指定的坐标。这提供了 灵活的固有尺寸限制或 不需要或想要对齐。对于你想要孩子的情况 要自动调整大小和对齐的内容,通常最好 使用网格元素。