Szukam sposobu, aby móc użyć elementu wpf Path, aby narysować ścieżkę, która będzie reprezentować trasę na mapie. Mam klasę Route zawierającą zbiór wierzchołków i chciałbym użyć jej do wiązania. Naprawdę nie wiem, jak zacząć ... Jakieś wskazówki?Tworzenie ścieżki i powiązanie danych
Odpowiedz
Główną rzeczą, którą trzeba za wiązanie to konwerter, który zamienia swoje punkty w Geometry
którym ścieżka będzie musiał jak Data
, tutaj jest to, co mój jednokierunkowy przetwornik od A System.Windows.Point
-array geometrii wygląda następująco:
[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
}
Teraz pozostało tylko utworzyć jego egzemplarz i użyć go jako konwertera dla wiązania. Co to może wyglądać w 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>
Jeśli potrzebujesz wiązania do automatycznej aktualizacji należy pracować z właściwości zależność lub interfejsów jak INotifyPropertyChanged
/INotifyCollectionChanged
nadzieję, że pomoże: D
także można spróbować to w ten sposób:
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";
}
Następnie w zasobie stworzyć PathString
<Window.Resources>
<yourNamespace:PathStrings x:Key="pathStrings"/>
</Window.Resources>
następnie powiązać ją w następujący sposób:
<Path Stroke="Black" Fill="Black"
Data="{Binding Source={StaticResource pathStrings}, Path=Add}"></Path>
Dzięki, walczyłem z tym przez ostatnie 6 lat :) – kubal5003
- 1. Reagowanie i powiązanie danych
- 2. Powiązanie ASP.NET - domyślne ścieżki wirtualne?
- 3. Java - tworzenie ścieżki klasy
- 4. Silnie wpisane powiązanie danych i generyczne?
- 5. Powiązanie danych z Javą
- 6. Tworzenie ścieżki w rzutce: svg
- 7. Dwukierunkowe powiązanie danych w backbone.js
- 8. Android leniwy powiązanie danych możliwe?
- 9. Powiązanie danych w dyrektywie AngularJs
- 10. WPF: powiązanie danych z kodem
- 11. Powiązanie danych WPF Zawartość etykiety
- 12. Ember.js: powiązanie danych między kontrolerami
- 13. Wyczyść powiązanie w Silverlight (usuń powiązanie danych z SetBinding)
- 14. Powiązanie i minimalizacja TypeScript?
- 15. Jak dwukierunkowe powiązanie danych między rodzicami i wnukami w Vue.js
- 16. Powiązanie między katalogiem, schematem, użytkownikiem i instancją bazy danych
- 17. Wyrażanie kodu ASP.NET, powiązanie danych i inne deklaratywne wyrażenia ekspresowe
- 18. Modele AngularJS, wiele zakresów i dwukierunkowe powiązanie danych
- 19. PLCrashReporter: Tworzenie czytelnej dla człowieka ścieżki stosu
- 20. Tworzenie trasy z opcjonalnym przedrostkiem ścieżki
- 21. Tworzenie etykiet punktów wykresu ścieżki w metaforze
- 22. Tworzenie bułką tartą ścieżki w ASP.NET MVC
- 23. WPF: Tworzenie całego "bloku" ścieżki klikalnej
- 24. Powiązanie danych w Androidzie z układem xml
- 25. Co to jest powiązanie danych deklaratywnych?
- 26. Dwukierunkowe powiązanie danych we właściwości wejściowej komponentu
- 27. Dwukierunkowe powiązanie danych nie działa w dyrektywie
- 28. Gradle 2.3.0-alpha1 nie działa powiązanie danych
- 29. Powiązanie danych WPF z ResourceDictionary MVVM
- 30. Ręczne powiązanie danych przy użyciu WriteValue
super. Napisałem wcześniej konwertery, ale jakoś nie mogłem tego rozgryźć. Myślałem o używaniu DataTemplates lub stylów lub czegoś podobnego, ale jest to świetne rozwiązanie. Dziękuję Ci. – kubal5003
Cieszę się, że pomogło! –
@PortlandRunner: Jest to właściwość typu 'Point []', debugowanie pojedynczych powiązań nie jest zasięgiem tej odpowiedzi. –