Update MapLayersMenuButton.cs

This commit is contained in:
ClemensFischer 2022-12-08 17:50:03 +01:00
parent 3344ef73dc
commit 7e7f77afe6

View file

@ -2,6 +2,7 @@
// © 2022 Clemens Fischer // © 2022 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL) // Licensed under the Microsoft Public License (Ms-PL)
using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Linq; using System.Linq;
@ -27,6 +28,9 @@ namespace MapControl.UiTools
{ {
public string Text { get; set; } public string Text { get; set; }
public UIElement Layer { get; set; } public UIElement Layer { get; set; }
public Func<UIElement> LayerFactory { get; set; }
public UIElement GetLayer() => Layer ?? (Layer = LayerFactory?.Invoke());
} }
#if WINUI || UWP #if WINUI || UWP
@ -67,10 +71,10 @@ namespace MapControl.UiTools
foreach (var item in MapLayers) 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) if (MapOverlays.Count > 0)
{ {
@ -81,7 +85,7 @@ namespace MapControl.UiTools
foreach (var item in MapOverlays) 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) private void MapLayerClicked(object sender, RoutedEventArgs e)
{ {
var item = (FrameworkElement)sender; 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) private void MapOverlayClicked(object sender, RoutedEventArgs e)
{ {
var item = (FrameworkElement)sender; var item = (FrameworkElement)sender;
var layer = (UIElement)item.Tag; var mapLayerItem = (MapLayerItem)item.Tag;
ToggleMapOverlay(layer); ToggleMapOverlay(mapLayerItem.GetLayer());
} }
private void SetMapLayer(UIElement layer) private void SetMapLayer(UIElement layer)
@ -129,7 +133,7 @@ namespace MapControl.UiTools
{ {
int index = 1; 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) if (overlay == layer)
{ {
@ -151,7 +155,7 @@ namespace MapControl.UiTools
{ {
foreach (var item in GetMenuItems()) foreach (var item in GetMenuItems())
{ {
item.IsChecked = Map.Children.Contains((UIElement)item.Tag); item.IsChecked = Map.Children.Contains(((MapLayerItem)item.Tag).Layer);
} }
} }
} }