在WPF中绘制动态多边形

时间:2013-12-09 07:28:15

标签: c# wpf drawing polygon shapes

我不确定这是否是提出此类概念信息建议的正确位置,所以如果在Stack Overflow中询问它是不相关的还是偏离主题我会道歉。

我想在WPF中开发一个应用程序,它能够绘制具有常规控件功能的多边形,它们可以通过添加,移除或移动顶点来改变形状,通过运行时更改画笔,从数据绑定或者可能直接从C#代码操作(仍然不确定)。

我想要实现的是绘制地图的应用程序,其上的形状是地图上具有动态边框的实体(例如说政治边界)。多边形也必须是具有碰撞测试的可点击控件(不仅仅是一个边界框,而是完全由地图上实体的形状)。我可以期待形状非常详细,因为河流和山脉或其他自然物体发现的边界不仅仅是两个顶点的直线,所以它的性能应该是一个重要的因素,因为一个多边形可能包含数百个顶点)

我得出的结论是,可以通过WPF实现这样的应用程序。但我的不确定性是实现地图绘制的最有效方式,也许我应该像SharpDX一样实施D3D托管,但我不想要它,它会让事情变得更复杂和困难。

我更喜欢这张地图中的所有内容都可以作为常规WPF控件使用它的数据绑定和样式化功能。几个月来,我与WPF开发了几个小型测试项目,以学习基础知识及其主要概念。但现在我的主要兴趣是用WPF开发。我需要一些建议,因为绘制复杂而动态的形状对我来说仍然不是很清楚,只是继续开发它。

1 个答案:

答案 0 :(得分:5)

我会使用WPF,实际上我会说WPF是完美的,尽管会有相当多的学习。 WPF使用DirectX,因此我想象的是预先形成的(如果你有硬件)。

您需要熟悉:

但是,如果您还不熟悉依赖属性,那么学习起来很麻烦,因此您可以在UserControl中使用Canvas来创建自己的Window。 {1}}以编程方式或在设计时在XAML中构建。

实际绘制形状;如果你提前知道形状看起来是什么样的,你可以使用像Blend这样的工具提前绘制它们(或者你自己在XAML中 - 你需要熟悉路径标记语法)然后你可以使用变换如ScaleTransform在运行时转换它们,或者如果要在运行时构建它们,可以通过编程方式将点添加到Polygon

e.g。来自(Polygon

//Add the Polygon Element
myPolygon = new Polygon();
myPolygon.Stroke = System.Windows.Media.Brushes.Black;
myPolygon.Fill = System.Windows.Media.Brushes.LightSeaGreen;
myPolygon.StrokeThickness = 2;
myPolygon.HorizontalAlignment = HorizontalAlignment.Left;
myPolygon.VerticalAlignment = VerticalAlignment.Center;
System.Windows.Point Point1 = new System.Windows.Point(1, 50);
System.Windows.Point Point2 = new System.Windows.Point(10,80);
System.Windows.Point Point3 = new System.Windows.Point(50,50);
PointCollection myPointCollection = new PointCollection();
myPointCollection.Add(Point1);
myPointCollection.Add(Point2);
myPointCollection.Add(Point3);
myPolygon.Points = myPointCollection;
myGrid.Children.Add(myPolygon);