没有在画布上绘制多边形

本文关键字:绘制 多边形 | 更新日期: 2023-09-27 18:05:59

我正在学习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
: 32119 .425625842204
: 96119 .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>

将多边形(十六进制)添加到画布子元素后,不绘制任何内容

没有在画布上绘制多边形

删除 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是唯一没有固有布局的面板元素特征。画布具有默认的高度和宽度属性0 ,除非它是自动缩放元素的子元素其子元素。Canvas的子元素永远不会调整大小都在指定的坐标上。这提供了在固有大小限制或对齐不是必需的,也不是想要的。如果你想要孩子的话内容要自动调整大小和对齐,通常最好是使用Grid元素