路径绘制和数据绑定 [英] Path drawing and data binding
问题描述
我正在寻找一种方法,能够使用 wpf Path 元素来绘制将在地图上表示路线的路径.我有包含顶点集合的 Route 类,并希望将其用于绑定.我什至不知道如何开始..有什么提示吗?
I am looking for a way to be able to use the wpf Path element to draw a path that will represent a route on the map. I have the Route class that contains a collection of vertices and would like to use it for binding. I don't really know how to even start.. Any hints?
推荐答案
绑定所需的主要内容是一个转换器,可将您的点转换为 Geometry
,路径需要为 Geometry
code>Data,这是我从 System.Windows.Point
-array 到 Geometry 的单向转换器的样子:
The main thing you'll need for the binding is a converter that turns your points into Geometry
which the path will need as Data
, here is what my one-way converter from a System.Windows.Point
-array to Geometry looks like:
[ValueConversion(typeof(Point[]), typeof(Geometry))]
public class PointsToPathConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Point[] points = (Point[])value;
if (points.Length > 0)
{
Point start = points[0];
List<LineSegment> segments = new List<LineSegment>();
for (int i = 1; i < points.Length; i++)
{
segments.Add(new LineSegment(points[i], true));
}
PathFigure figure = new PathFigure(start, segments, false); //true if closed
PathGeometry geometry = new PathGeometry();
geometry.Figures.Add(figure);
return geometry;
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
现在真正剩下的就是创建它的一个实例并将其用作绑定的转换器.它在 XAML 中的样子:
Now all that is really left is to create an instance of it and use it as the converter for the binding. What it might look like in XAML:
<Grid>
<Grid.Resources>
<local:PointsToPathConverter x:Key="PointsToPathConverter"/>
</Grid.Resources>
<Path Data="{Binding ElementName=Window, Path=Points, Converter={StaticResource ResourceKey=PointsToPathConverter}}"
Stroke="Black"/>
</Grid>
如果您需要自动更新绑定,您应该使用依赖属性或接口,例如 INotifyPropertyChanged
/INotifyCollectionChanged
希望有帮助:D
If you need the binding to update automatically you should work with dependency properties or interfaces like INotifyPropertyChanged
/INotifyCollectionChanged
Hope that helps :D
这篇关于路径绘制和数据绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!