没有在画布上绘制多边形

时间:2014-05-31 18:13:10

标签: c# wpf wpf-controls polygon

我正在学习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>

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

1 个答案:

答案 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具有默认的高度和宽度属性   零,除非它是自动调整大小的元素的子元素   它的子元素。画布的子元素永远不会调整大小,它们   只是位于他们指定的坐标。这提供了   灵活的固有尺寸限制或   不需要或想要对齐。对于你想要孩子的情况   要自动调整大小和对齐的内容,通常最好   使用网格元素。