mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2026-04-07 23:45:05 +00:00
PushpinBorder for all platforms
This commit is contained in:
parent
4a38e1e1e9
commit
a4f19a5976
16 changed files with 291 additions and 164 deletions
93
MapControl/WinUI/PushpinBorder.WinUI.cs
Normal file
93
MapControl/WinUI/PushpinBorder.WinUI.cs
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// © 2022 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using Windows.Foundation;
|
||||
#if WINUI
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Data;
|
||||
using Microsoft.UI.Xaml.Markup;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Microsoft.UI.Xaml.Shapes;
|
||||
#else
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Markup;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Shapes;
|
||||
#endif
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
[ContentProperty(Name = "Child")]
|
||||
public partial class PushpinBorder : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty ArrowSizeProperty = DependencyProperty.Register(
|
||||
nameof(ArrowSize), typeof(Size), typeof(PushpinBorder),
|
||||
new PropertyMetadata(new Size(10d, 20d), (o, e) => ((PushpinBorder)o).SetBorderMargin()));
|
||||
|
||||
public static readonly DependencyProperty BorderWidthProperty = DependencyProperty.Register(
|
||||
nameof(BorderWidth), typeof(double), typeof(PushpinBorder),
|
||||
new PropertyMetadata(0d, (o, e) => ((PushpinBorder)o).SetBorderMargin()));
|
||||
|
||||
private readonly Border border = new Border();
|
||||
|
||||
public PushpinBorder()
|
||||
{
|
||||
var path = new Path
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||
VerticalAlignment = VerticalAlignment.Stretch,
|
||||
Stretch = Stretch.None
|
||||
};
|
||||
|
||||
path.SetBinding(Shape.FillProperty, new Binding
|
||||
{
|
||||
Path = new PropertyPath("Background"),
|
||||
Source = this
|
||||
});
|
||||
|
||||
path.SetBinding(Shape.StrokeProperty, new Binding
|
||||
{
|
||||
Path = new PropertyPath("BorderBrush"),
|
||||
Source = this
|
||||
});
|
||||
|
||||
path.SetBinding(Shape.StrokeThicknessProperty, new Binding
|
||||
{
|
||||
Path = new PropertyPath("BorderThickness"),
|
||||
Source = this
|
||||
});
|
||||
|
||||
border.SetBinding(PaddingProperty, new Binding
|
||||
{
|
||||
Path = new PropertyPath("Padding"),
|
||||
Source = this
|
||||
});
|
||||
|
||||
SetBorderMargin();
|
||||
|
||||
var grid = new Grid();
|
||||
grid.Children.Add(path);
|
||||
grid.Children.Add(border);
|
||||
|
||||
Content = grid;
|
||||
|
||||
SizeChanged += (s, e) => path.Data = BuildGeometry();
|
||||
}
|
||||
|
||||
public UIElement Child
|
||||
{
|
||||
get { return border.Child; }
|
||||
set { border.Child = value; }
|
||||
}
|
||||
|
||||
private void SetBorderMargin()
|
||||
{
|
||||
border.Margin = new Thickness(
|
||||
BorderWidth, BorderWidth, BorderWidth, BorderWidth + ArrowSize.Height);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue