// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control // © 2022 Clemens Fischer // Licensed under the Microsoft Public License (Ms-PL) using Windows.System; #if WINUI using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; #else using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; #endif namespace MapControl { public partial class MapItem { public static readonly DependencyProperty AutoCollapseProperty = DependencyProperty.Register( nameof(AutoCollapse), typeof(bool), typeof(MapItem), new PropertyMetadata(false, (o, e) => MapPanel.SetAutoCollapse((MapItem)o, (bool)e.NewValue))); public static readonly DependencyProperty LocationProperty = DependencyProperty.Register( nameof(Location), typeof(Location), typeof(MapItem), new PropertyMetadata(null, (o, e) => MapPanel.SetLocation((MapItem)o, (Location)e.NewValue))); public MapItem() { DefaultStyleKey = typeof(MapItem); MapPanel.InitMapElement(this); } protected override void OnPointerPressed(PointerRoutedEventArgs e) { (ItemsControl.ItemsControlFromItemContainer(this) as MapItemsControl)?.OnItemClicked( this, e.KeyModifiers.HasFlag(VirtualKeyModifiers.Control), e.KeyModifiers.HasFlag(VirtualKeyModifiers.Shift)); } protected override void OnApplyTemplate() { base.OnApplyTemplate(); var parentMap = MapPanel.GetParentMap(this); if (parentMap != null) { // If this.Background is not explicitly set, bind it to parentMap.Background this.SetBindingOnUnsetProperty(BackgroundProperty, parentMap, Panel.BackgroundProperty, nameof(Background)); // If this.Foreground is not explicitly set, bind it to parentMap.Foreground this.SetBindingOnUnsetProperty(ForegroundProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground)); // If this.BorderBrush is not explicitly set, bind it to parentMap.Foreground this.SetBindingOnUnsetProperty(BorderBrushProperty, parentMap, MapBase.ForegroundProperty, nameof(Foreground)); } } } public partial class MapItemsControl { public MapItemsControl() { DefaultStyleKey = typeof(MapItemsControl); MapPanel.InitMapElement(this); } public new FrameworkElement ContainerFromItem(object item) { return (FrameworkElement)base.ContainerFromItem(item); } } }