Рисование пути и привязка данных - PullRequest
9 голосов
/ 08 января 2011

Я ищу способ использования элемента Path wpf для рисования пути, который будет представлять маршрут на карте.У меня есть класс Route, который содержит коллекцию вершин и хотел бы использовать его для привязки.Я даже не знаю, как начать .. Любые намеки?

Ответы [ 2 ]

24 голосов
/ 08 января 2011

Главное, что вам нужно для привязки, - это конвертер, который преобразует ваши точки в Geometry, который понадобится для пути как Data, вот что мой односторонний преобразователь из массива System.Windows.Point в Геометрия выглядит так:

[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:

<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

1 голос
/ 21 сентября 2017

Также вы можете попробовать это следующим образом:

public static class PathStrings
{
    public const string Add = "F1 M 22,12L 26,12L 26,22L 36,22L 36,26L 26,26L 26,36L 22,36L 22,26L 12,26L 12,22L 22,22L 22,12 Z";
}

Затем в ресурсе создайте PathString

<Window.Resources>
    <yourNamespace:PathStrings x:Key="pathStrings"/>
</Window.Resources>

, затем привяжите его следующим образом:

<Path Stroke="Black" Fill="Black" 
      Data="{Binding Source={StaticResource pathStrings}, Path=Add}"></Path>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...