mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Update MapLayersMenuButton.cs
This commit is contained in:
parent
3344ef73dc
commit
7e7f77afe6
|
|
@ -2,6 +2,7 @@
|
|||
// © 2022 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
|
|
@ -27,6 +28,9 @@ namespace MapControl.UiTools
|
|||
{
|
||||
public string Text { get; set; }
|
||||
public UIElement Layer { get; set; }
|
||||
public Func<UIElement> LayerFactory { get; set; }
|
||||
|
||||
public UIElement GetLayer() => Layer ?? (Layer = LayerFactory?.Invoke());
|
||||
}
|
||||
|
||||
#if WINUI || UWP
|
||||
|
|
@ -67,10 +71,10 @@ namespace MapControl.UiTools
|
|||
|
||||
foreach (var item in MapLayers)
|
||||
{
|
||||
menu.Items.Add(CreateMenuItem(item.Text, item.Layer, MapLayerClicked));
|
||||
menu.Items.Add(CreateMenuItem(item.Text, item, MapLayerClicked));
|
||||
}
|
||||
|
||||
var initialLayer = MapLayers.Select(l => l.Layer).FirstOrDefault();
|
||||
var initialLayer = MapLayers.Select(l => l.GetLayer()).FirstOrDefault();
|
||||
|
||||
if (MapOverlays.Count > 0)
|
||||
{
|
||||
|
|
@ -81,7 +85,7 @@ namespace MapControl.UiTools
|
|||
|
||||
foreach (var item in MapOverlays)
|
||||
{
|
||||
menu.Items.Add(CreateMenuItem(item.Text, item.Layer, MapOverlayClicked));
|
||||
menu.Items.Add(CreateMenuItem(item.Text, item, MapOverlayClicked));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -95,17 +99,17 @@ namespace MapControl.UiTools
|
|||
private void MapLayerClicked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var item = (FrameworkElement)sender;
|
||||
var layer = (UIElement)item.Tag;
|
||||
var mapLayerItem = (MapLayerItem)item.Tag;
|
||||
|
||||
SetMapLayer(layer);
|
||||
SetMapLayer(mapLayerItem.GetLayer());
|
||||
}
|
||||
|
||||
private void MapOverlayClicked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var item = (FrameworkElement)sender;
|
||||
var layer = (UIElement)item.Tag;
|
||||
var mapLayerItem = (MapLayerItem)item.Tag;
|
||||
|
||||
ToggleMapOverlay(layer);
|
||||
ToggleMapOverlay(mapLayerItem.GetLayer());
|
||||
}
|
||||
|
||||
private void SetMapLayer(UIElement layer)
|
||||
|
|
@ -129,7 +133,7 @@ namespace MapControl.UiTools
|
|||
{
|
||||
int index = 1;
|
||||
|
||||
foreach (var overlay in MapOverlays.Select(l => l.Layer))
|
||||
foreach (var overlay in MapOverlays.Select(o => o.Layer).Where(o => o != null))
|
||||
{
|
||||
if (overlay == layer)
|
||||
{
|
||||
|
|
@ -151,7 +155,7 @@ namespace MapControl.UiTools
|
|||
{
|
||||
foreach (var item in GetMenuItems())
|
||||
{
|
||||
item.IsChecked = Map.Children.Contains((UIElement)item.Tag);
|
||||
item.IsChecked = Map.Children.Contains(((MapLayerItem)item.Tag).Layer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue