mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2026-01-02 14:50:06 +01:00
Added Avalonia MapOverlay and MapScale
This commit is contained in:
parent
192ecbf4df
commit
35c0076336
25
MapControl/Avalonia/BindingHelper.Avalonia.cs
Normal file
25
MapControl/Avalonia/BindingHelper.Avalonia.cs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using Avalonia.Data;
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
internal static class BindingHelper
|
||||
{
|
||||
public static Binding CreateBinding(this object source, string property)
|
||||
{
|
||||
return new Binding
|
||||
{
|
||||
Source = source,
|
||||
Path = property
|
||||
};
|
||||
}
|
||||
|
||||
public static void SetBinding(this AvaloniaObject target, AvaloniaProperty property, Binding binding)
|
||||
{
|
||||
target.Bind(property, binding);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -28,11 +28,9 @@
|
|||
<Compile Remove="..\Shared\MapGraticule.cs" />
|
||||
<Compile Remove="..\Shared\MapItem.cs" />
|
||||
<Compile Remove="..\Shared\MapItemsControl.cs" />
|
||||
<Compile Remove="..\Shared\MapOverlay.cs" />
|
||||
<Compile Remove="..\Shared\MapPath.cs" />
|
||||
<Compile Remove="..\Shared\MapPolyline.cs" />
|
||||
<Compile Remove="..\Shared\MapPolygon.cs" />
|
||||
<Compile Remove="..\Shared\MapScale.cs" />
|
||||
<Compile Remove="..\Shared\PushpinBorder.cs" />
|
||||
<Compile Remove="..\Shared\ViewTransform.cs" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
77
MapControl/Avalonia/MapOverlay.Avalonia.cs
Normal file
77
MapControl/Avalonia/MapOverlay.Avalonia.cs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Controls.Documents;
|
||||
using Avalonia.Controls.Shapes;
|
||||
using Avalonia.Data;
|
||||
using Avalonia.Media;
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
public partial class MapOverlay
|
||||
{
|
||||
public static readonly StyledProperty<FontFamily> FontFamilyProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, FontFamily>(TextElement.FontFamilyProperty);
|
||||
|
||||
public static readonly StyledProperty<double> FontSizeProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, double>(TextElement.FontSizeProperty);
|
||||
|
||||
public static readonly StyledProperty<FontStyle> FontStyleProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, FontStyle>(TextElement.FontStyleProperty);
|
||||
|
||||
public static readonly StyledProperty<FontStretch> FontStretchProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, FontStretch>(TextElement.FontStretchProperty);
|
||||
|
||||
public static readonly StyledProperty<FontWeight> FontWeightProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, FontWeight>(TextElement.FontWeightProperty);
|
||||
|
||||
public static readonly StyledProperty<IBrush> ForegroundProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, IBrush>(TextElement.ForegroundProperty);
|
||||
|
||||
public static readonly StyledProperty<IBrush> StrokeProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, IBrush>(Shape.StrokeProperty);
|
||||
|
||||
public static readonly StyledProperty<double> StrokeThicknessProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, double>(nameof(StrokeThickness), 1d);
|
||||
|
||||
public static readonly StyledProperty<AvaloniaList<double>> StrokeDashArrayProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, AvaloniaList<double>>(Shape.StrokeDashArrayProperty);
|
||||
|
||||
public static readonly StyledProperty<double> StrokeDashOffsetProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, double>(Shape.StrokeDashOffsetProperty);
|
||||
|
||||
public static readonly StyledProperty<PenLineCap> StrokeLineCapProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineCap>(Shape.StrokeLineCapProperty);
|
||||
|
||||
public static readonly StyledProperty<PenLineJoin> StrokeLineJoinProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineJoin>(Shape.StrokeJoinProperty);
|
||||
|
||||
public static readonly StyledProperty<double> StrokeMiterLimitProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, double>(nameof(StrokeMiterLimit));
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
base.OnInitialized();
|
||||
|
||||
if (Stroke == null)
|
||||
{
|
||||
this.SetBinding(StrokeProperty, this.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
}
|
||||
|
||||
public Pen CreatePen()
|
||||
{
|
||||
return new Pen
|
||||
{
|
||||
Brush = Stroke,
|
||||
Thickness = StrokeThickness,
|
||||
LineJoin = StrokeLineJoin,
|
||||
MiterLimit = StrokeMiterLimit,
|
||||
LineCap = StrokeLineCap,
|
||||
DashStyle = new DashStyle(StrokeDashArray, StrokeDashOffset)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,35 +17,13 @@ namespace MapControl
|
|||
{
|
||||
internal static class BindingHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a Binding to the specified dependency property of a FrameworkElement.
|
||||
/// If the source property is itself already bound, the method returns the existing Binding,
|
||||
/// otherwise it creates one with sourceElement as Source and sourcePropertyName as Path.
|
||||
/// </summary>
|
||||
public static Binding GetOrCreateBinding(
|
||||
this FrameworkElement sourceElement, DependencyProperty sourceProperty, string sourcePropertyName)
|
||||
public static Binding CreateBinding(this FrameworkElement source, string property)
|
||||
{
|
||||
var sourceBinding = sourceElement.GetBindingExpression(sourceProperty);
|
||||
|
||||
return sourceBinding != null
|
||||
? sourceBinding.ParentBinding
|
||||
: new Binding { Source = sourceElement, Path = new PropertyPath(sourcePropertyName) };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets a Binding on the specified dependency property of targetElement, if the target property does
|
||||
/// not yet have a value or a Binding assigned to it. The potentially assigned Binding is created by
|
||||
/// GetOrCreateBinding(sourceElement, sourceProperty, sourcePropertyName).
|
||||
/// </summary>
|
||||
public static void SetBindingOnUnsetProperty(
|
||||
this FrameworkElement targetElement, DependencyProperty targetProperty,
|
||||
FrameworkElement sourceElement, DependencyProperty sourceProperty, string sourcePropertyName)
|
||||
{
|
||||
if (targetElement.GetValue(targetProperty) == null &&
|
||||
targetElement.GetBindingExpression(targetProperty) == null)
|
||||
return new Binding
|
||||
{
|
||||
targetElement.SetBinding(targetProperty, GetOrCreateBinding(sourceElement, sourceProperty, sourcePropertyName));
|
||||
}
|
||||
Source = source,
|
||||
Path = new PropertyPath(property)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ using Windows.UI.Xaml.Media;
|
|||
#elif WINUI
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Windows.UI.Text;
|
||||
#elif AVALONIA
|
||||
using Avalonia.Media;
|
||||
using DoubleCollection = System.Collections.Generic.IEnumerable<double>;
|
||||
#endif
|
||||
|
||||
namespace MapControl
|
||||
|
|
@ -80,22 +83,10 @@ namespace MapControl
|
|||
set => SetValue(StrokeDashOffsetProperty, value);
|
||||
}
|
||||
|
||||
public PenLineCap StrokeDashCap
|
||||
public PenLineCap StrokeLineCap
|
||||
{
|
||||
get => (PenLineCap)GetValue(StrokeDashCapProperty);
|
||||
set => SetValue(StrokeDashCapProperty, value);
|
||||
}
|
||||
|
||||
public PenLineCap StrokeStartLineCap
|
||||
{
|
||||
get => (PenLineCap)GetValue(StrokeStartLineCapProperty);
|
||||
set => SetValue(StrokeStartLineCapProperty, value);
|
||||
}
|
||||
|
||||
public PenLineCap StrokeEndLineCap
|
||||
{
|
||||
get => (PenLineCap)GetValue(StrokeEndLineCapProperty);
|
||||
set => SetValue(StrokeEndLineCapProperty, value);
|
||||
get => (PenLineCap)GetValue(StrokeLineCapProperty);
|
||||
set => SetValue(StrokeLineCapProperty, value);
|
||||
}
|
||||
|
||||
public PenLineJoin StrokeLineJoin
|
||||
|
|
|
|||
|
|
@ -7,20 +7,32 @@ using System.Globalization;
|
|||
#if WPF
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Shapes;
|
||||
#elif UWP
|
||||
using Windows.Foundation;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Shapes;
|
||||
#elif WINUI
|
||||
using Windows.Foundation;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Data;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Microsoft.UI.Xaml.Shapes;
|
||||
#elif AVALONIA
|
||||
using Avalonia.Data;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Shapes;
|
||||
using Avalonia.Media;
|
||||
using DependencyProperty = Avalonia.AvaloniaProperty;
|
||||
using HorizontalAlignment = Avalonia.Layout.HorizontalAlignment;
|
||||
using VerticalAlignment = Avalonia.Layout.VerticalAlignment;
|
||||
using PointCollection = System.Collections.Generic.List<Avalonia.Point>;
|
||||
#endif
|
||||
|
||||
namespace MapControl
|
||||
|
|
@ -53,11 +65,10 @@ namespace MapControl
|
|||
{
|
||||
base.SetParentMap(map);
|
||||
|
||||
line.SetBinding(Shape.StrokeProperty, this.GetOrCreateBinding(StrokeProperty, nameof(Stroke)));
|
||||
line.SetBinding(Shape.StrokeThicknessProperty, this.GetOrCreateBinding(StrokeThicknessProperty, nameof(StrokeThickness)));
|
||||
|
||||
line.SetBinding(Shape.StrokeProperty, this.CreateBinding(nameof(Stroke)));
|
||||
line.SetBinding(Shape.StrokeThicknessProperty, this.CreateBinding(nameof(StrokeThickness)));
|
||||
#if UWP || WINUI
|
||||
label.SetBinding(TextBlock.ForegroundProperty, this.GetOrCreateBinding(ForegroundProperty, nameof(Foreground)));
|
||||
label.SetBinding(TextBlock.ForegroundProperty, this.CreateBinding(nameof(Foreground)));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -69,42 +80,44 @@ namespace MapControl
|
|||
|
||||
protected override Size MeasureOverride(Size availableSize)
|
||||
{
|
||||
var size = new Size();
|
||||
double scale;
|
||||
|
||||
if (ParentMap != null && (scale = ParentMap.GetScale(ParentMap.Center).X) > 0d)
|
||||
if (ParentMap == null || (scale = ParentMap.GetScale(ParentMap.Center).X) <= 0d)
|
||||
{
|
||||
var length = MinWidth / scale;
|
||||
var magnitude = Math.Pow(10d, Math.Floor(Math.Log10(length)));
|
||||
return new Size();
|
||||
}
|
||||
|
||||
length = length / magnitude < 2d ? 2d * magnitude
|
||||
: length / magnitude < 5d ? 5d * magnitude
|
||||
: 10d * magnitude;
|
||||
var length = MinWidth / scale;
|
||||
var magnitude = Math.Pow(10d, Math.Floor(Math.Log10(length)));
|
||||
|
||||
size.Width = length * scale + StrokeThickness + Padding.Left + Padding.Right;
|
||||
size.Height = 1.25 * FontSize + StrokeThickness + Padding.Top + Padding.Bottom;
|
||||
length = length / magnitude < 2d ? 2d * magnitude
|
||||
: length / magnitude < 5d ? 5d * magnitude
|
||||
: 10d * magnitude;
|
||||
|
||||
var x1 = Padding.Left + StrokeThickness / 2d;
|
||||
var x2 = size.Width - Padding.Right - StrokeThickness / 2d;
|
||||
var y1 = size.Height / 2d;
|
||||
var y2 = size.Height - Padding.Bottom - StrokeThickness / 2d;
|
||||
var size = new Size(
|
||||
length * scale + StrokeThickness + Padding.Left + Padding.Right,
|
||||
1.25 * FontSize + StrokeThickness + Padding.Top + Padding.Bottom);
|
||||
|
||||
line.Points = new PointCollection
|
||||
var x1 = Padding.Left + StrokeThickness / 2d;
|
||||
var x2 = size.Width - Padding.Right - StrokeThickness / 2d;
|
||||
var y1 = size.Height / 2d;
|
||||
var y2 = size.Height - Padding.Bottom - StrokeThickness / 2d;
|
||||
|
||||
line.Points = new PointCollection
|
||||
{
|
||||
new Point(x1, y1),
|
||||
new Point(x1, y2),
|
||||
new Point(x2, y2),
|
||||
new Point(x2, y1)
|
||||
};
|
||||
line.Measure(size);
|
||||
line.Measure(size);
|
||||
|
||||
label.Text = length >= 1000d
|
||||
? string.Format(CultureInfo.InvariantCulture, "{0:F0} km", length / 1000d)
|
||||
: string.Format(CultureInfo.InvariantCulture, "{0:F0} m", length);
|
||||
label.Width = size.Width;
|
||||
label.Height = size.Height;
|
||||
label.Measure(size);
|
||||
}
|
||||
label.Text = length >= 1000d
|
||||
? string.Format(CultureInfo.InvariantCulture, "{0:F0} km", length / 1000d)
|
||||
: string.Format(CultureInfo.InvariantCulture, "{0:F0} m", length);
|
||||
label.Width = size.Width;
|
||||
label.Height = size.Height;
|
||||
label.Measure(size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Shapes;
|
||||
|
|
@ -42,15 +43,9 @@ namespace MapControl
|
|||
public static readonly DependencyProperty StrokeDashOffsetProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, double>(Shape.StrokeDashOffsetProperty);
|
||||
|
||||
public static readonly DependencyProperty StrokeDashCapProperty =
|
||||
public static readonly DependencyProperty StrokeLineCapProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineCap>(Shape.StrokeDashCapProperty);
|
||||
|
||||
public static readonly DependencyProperty StrokeStartLineCapProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineCap>(Shape.StrokeStartLineCapProperty);
|
||||
|
||||
public static readonly DependencyProperty StrokeEndLineCapProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineCap>(Shape.StrokeEndLineCapProperty);
|
||||
|
||||
public static readonly DependencyProperty StrokeLineJoinProperty =
|
||||
DependencyPropertyHelper.AddOwner<MapOverlay, PenLineJoin>(Shape.StrokeLineJoinProperty);
|
||||
|
||||
|
|
@ -61,9 +56,10 @@ namespace MapControl
|
|||
{
|
||||
base.OnInitialized(e);
|
||||
|
||||
// If this.Stroke is not explicitly set, bind it to this.Foreground.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(StrokeProperty, this, ForegroundProperty, nameof(Foreground));
|
||||
if (Stroke == null)
|
||||
{
|
||||
SetBinding(StrokeProperty, this.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
}
|
||||
|
||||
public Pen CreatePen()
|
||||
|
|
@ -74,9 +70,9 @@ namespace MapControl
|
|||
Thickness = StrokeThickness,
|
||||
LineJoin = StrokeLineJoin,
|
||||
MiterLimit = StrokeMiterLimit,
|
||||
StartLineCap = StrokeStartLineCap,
|
||||
EndLineCap = StrokeEndLineCap,
|
||||
DashCap = StrokeDashCap,
|
||||
StartLineCap = StrokeLineCap,
|
||||
EndLineCap = StrokeLineCap,
|
||||
DashCap = StrokeLineCap,
|
||||
DashStyle = new DashStyle(StrokeDashArray, StrokeDashOffset)
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,17 +57,20 @@ namespace MapControl
|
|||
|
||||
if (parentMap != null)
|
||||
{
|
||||
// If this.Background is not explicitly set, bind it to parentMap.Background.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(BackgroundProperty, parentMap, Panel.BackgroundProperty, nameof(Background));
|
||||
if (Background == null)
|
||||
{
|
||||
SetBinding(BackgroundProperty, parentMap.CreateBinding(nameof(Background)));
|
||||
}
|
||||
|
||||
// If this.Foreground is not explicitly set, bind it to parentMap.Foreground.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(ForegroundProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground));
|
||||
if (Foreground == null)
|
||||
{
|
||||
SetBinding(ForegroundProperty, parentMap.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
|
||||
// If this.BorderBrush is not explicitly set, bind it to parentMap.Foreground.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(BorderBrushProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground));
|
||||
if (BorderBrush == null)
|
||||
{
|
||||
SetBinding(BorderBrushProperty, parentMap.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@ namespace MapControl
|
|||
|
||||
if (Children.Count == 0)
|
||||
{
|
||||
path.SetBinding(Shape.StrokeProperty, this.GetOrCreateBinding(StrokeProperty, nameof(Stroke)));
|
||||
path.SetBinding(Shape.StrokeThicknessProperty, this.GetOrCreateBinding(StrokeThicknessProperty, nameof(StrokeThickness)));
|
||||
path.SetBinding(Shape.StrokeDashArrayProperty, this.GetOrCreateBinding(StrokeDashArrayProperty, nameof(StrokeDashArray)));
|
||||
path.SetBinding(Shape.StrokeDashOffsetProperty, this.GetOrCreateBinding(StrokeDashOffsetProperty, nameof(StrokeDashOffset)));
|
||||
path.SetBinding(Shape.StrokeDashCapProperty, this.GetOrCreateBinding(StrokeDashCapProperty, nameof(StrokeDashCap)));
|
||||
path.SetBinding(Shape.StrokeProperty, this.CreateBinding(nameof(Stroke)));
|
||||
path.SetBinding(Shape.StrokeThicknessProperty, this.CreateBinding(nameof(StrokeThickness)));
|
||||
path.SetBinding(Shape.StrokeStartLineCapProperty, this.CreateBinding(nameof(StrokeLineCap)));
|
||||
path.SetBinding(Shape.StrokeEndLineCapProperty, this.CreateBinding(nameof(StrokeLineCap)));
|
||||
path.SetBinding(Shape.StrokeDashCapProperty, this.CreateBinding(nameof(StrokeLineCap)));
|
||||
path.SetBinding(Shape.StrokeDashArrayProperty, this.CreateBinding(nameof(StrokeDashArray)));
|
||||
path.SetBinding(Shape.StrokeDashOffsetProperty, this.CreateBinding(nameof(StrokeDashOffset)));
|
||||
|
||||
Children.Add(path);
|
||||
}
|
||||
|
|
@ -54,15 +56,15 @@ namespace MapControl
|
|||
else
|
||||
{
|
||||
textBlock = new TextBlock { RenderTransform = new MatrixTransform() };
|
||||
textBlock.SetBinding(TextBlock.FontSizeProperty, this.GetOrCreateBinding(FontSizeProperty, nameof(FontSize)));
|
||||
textBlock.SetBinding(TextBlock.FontStyleProperty, this.GetOrCreateBinding(FontStyleProperty, nameof(FontStyle)));
|
||||
textBlock.SetBinding(TextBlock.FontStretchProperty, this.GetOrCreateBinding(FontStretchProperty, nameof(FontStretch)));
|
||||
textBlock.SetBinding(TextBlock.FontWeightProperty, this.GetOrCreateBinding(FontWeightProperty, nameof(FontWeight)));
|
||||
textBlock.SetBinding(TextBlock.ForegroundProperty, this.GetOrCreateBinding(ForegroundProperty, nameof(Foreground)));
|
||||
textBlock.SetBinding(TextBlock.FontSizeProperty, this.CreateBinding(nameof(FontSize)));
|
||||
textBlock.SetBinding(TextBlock.FontStyleProperty, this.CreateBinding(nameof(FontStyle)));
|
||||
textBlock.SetBinding(TextBlock.FontStretchProperty, this.CreateBinding(nameof(FontStretch)));
|
||||
textBlock.SetBinding(TextBlock.FontWeightProperty, this.CreateBinding(nameof(FontWeight)));
|
||||
textBlock.SetBinding(TextBlock.ForegroundProperty, this.CreateBinding(nameof(Foreground)));
|
||||
|
||||
if (FontFamily != null)
|
||||
{
|
||||
textBlock.SetBinding(TextBlock.FontFamilyProperty, this.GetOrCreateBinding(FontFamilyProperty, nameof(FontFamily)));
|
||||
textBlock.SetBinding(TextBlock.FontFamilyProperty, this.CreateBinding(nameof(FontFamily)));
|
||||
}
|
||||
|
||||
Children.Add(textBlock);
|
||||
|
|
|
|||
|
|
@ -51,14 +51,20 @@ namespace MapControl
|
|||
|
||||
if (parentMap != null)
|
||||
{
|
||||
// If this.Background is not explicitly set, bind it to parentMap.Background
|
||||
this.SetBindingOnUnsetProperty(BackgroundProperty, parentMap, Panel.BackgroundProperty, nameof(Background));
|
||||
if (Background == null)
|
||||
{
|
||||
SetBinding(BackgroundProperty, parentMap.CreateBinding(nameof(Background)));
|
||||
}
|
||||
|
||||
// If this.Foreground is not explicitly set, bind it to parentMap.Foreground
|
||||
this.SetBindingOnUnsetProperty(ForegroundProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground));
|
||||
if (Foreground == null)
|
||||
{
|
||||
SetBinding(ForegroundProperty, parentMap.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
|
||||
// If this.BorderBrush is not explicitly set, bind it to parentMap.Foreground
|
||||
this.SetBindingOnUnsetProperty(BorderBrushProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground));
|
||||
if (BorderBrush == null)
|
||||
{
|
||||
SetBinding(BorderBrushProperty, parentMap.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,12 @@
|
|||
using Windows.UI.Text;
|
||||
#if UWP
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Media;
|
||||
#else
|
||||
using Microsoft.UI.Text;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Data;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
#endif
|
||||
|
||||
|
|
@ -46,14 +48,8 @@ namespace MapControl
|
|||
public static readonly DependencyProperty StrokeDashOffsetProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, double>(nameof(StrokeDashOffset));
|
||||
|
||||
public static readonly DependencyProperty StrokeDashCapProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, PenLineCap>(nameof(StrokeDashCap), PenLineCap.Flat);
|
||||
|
||||
public static readonly DependencyProperty StrokeStartLineCapProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, PenLineCap>(nameof(StrokeStartLineCap), PenLineCap.Flat);
|
||||
|
||||
public static readonly DependencyProperty StrokeEndLineCapProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, PenLineCap>(nameof(StrokeEndLineCap), PenLineCap.Flat);
|
||||
public static readonly DependencyProperty StrokeLineCapProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, PenLineCap>(nameof(StrokeLineCap), PenLineCap.Flat);
|
||||
|
||||
public static readonly DependencyProperty StrokeLineJoinProperty =
|
||||
DependencyPropertyHelper.Register<MapOverlay, PenLineJoin>(nameof(StrokeLineJoin), PenLineJoin.Miter);
|
||||
|
|
@ -65,13 +61,15 @@ namespace MapControl
|
|||
{
|
||||
if (map != null)
|
||||
{
|
||||
// If this.Forground is not explicitly set, bind it to map.Foreground.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(ForegroundProperty, map, MapBase.ForegroundProperty, nameof(Foreground));
|
||||
if (Foreground == null)
|
||||
{
|
||||
SetBinding(ForegroundProperty, map.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
|
||||
// If this.Stroke is not explicitly set, bind it to this.Foreground.
|
||||
//
|
||||
this.SetBindingOnUnsetProperty(StrokeProperty, this, ForegroundProperty, nameof(Foreground));
|
||||
if (Stroke == null)
|
||||
{
|
||||
SetBinding(StrokeProperty, this.CreateBinding(nameof(Foreground)));
|
||||
}
|
||||
}
|
||||
|
||||
base.SetParentMap(map);
|
||||
|
|
|
|||
Loading…
Reference in a new issue