Selection in MapItemsControl

This commit is contained in:
ClemensF 2018-11-14 17:53:37 +01:00
parent eb263d637b
commit 3b7879e6e0
3 changed files with 15 additions and 19 deletions

View file

@ -14,7 +14,6 @@ using System.Windows.Controls;
namespace MapControl
{
/// <summary>
/// Manages a collection of selectable items on a Map.
/// </summary>
@ -66,7 +65,7 @@ namespace MapControl
{
SelectItems(item =>
{
var loc = MapPanel.GetLocation(MapItemFromItem(item));
var loc = MapPanel.GetLocation(ContainerFromItem(item));
return loc != null && predicate(loc);
});
}
@ -75,7 +74,7 @@ namespace MapControl
{
SelectItems(item =>
{
var pos = MapPanel.GetViewportPosition(MapItemFromItem(item));
var pos = MapPanel.GetViewportPosition(ContainerFromItem(item));
return pos.HasValue && predicate(pos.Value);
});
}
@ -85,9 +84,9 @@ namespace MapControl
SelectItemsByPosition(p => rect.Contains(p));
}
internal void MapItemClicked(MapItem mapItem, bool controlKey, bool shiftKey)
protected internal void OnItemClicked(FrameworkElement mapItem, bool controlKey, bool shiftKey)
{
var item = ItemFromMapItem(mapItem);
var item = ItemFromContainer(mapItem);
if (SelectionMode == SelectionMode.Single)
{
@ -119,7 +118,7 @@ namespace MapControl
{
// Extended with Shift -> select items in viewport rectangle
var p1 = MapPanel.GetViewportPosition(MapItemFromItem(SelectedItem));
var p1 = MapPanel.GetViewportPosition(ContainerFromItem(SelectedItem));
var p2 = MapPanel.GetViewportPosition(mapItem);
if (p1.HasValue && p2.HasValue)

View file

@ -3,6 +3,7 @@
// Licensed under the Microsoft Public License (Ms-PL)
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
@ -24,21 +25,16 @@ namespace MapControl
{
e.Handled = true;
(ItemsControl.ItemsControlFromItemContainer(this) as MapItemsControl)?.MapItemClicked(
(ItemsControl.ItemsControlFromItemContainer(this) as MapItemsControl)?.OnItemClicked(
this, e.KeyModifiers.HasFlag(VirtualKeyModifiers.Control), e.KeyModifiers.HasFlag(VirtualKeyModifiers.Shift));
}
}
public partial class MapItemsControl
{
public MapItem MapItemFromItem(object item)
public new FrameworkElement ContainerFromItem(object item)
{
return (MapItem)ContainerFromItem(item);
}
public object ItemFromMapItem(MapItem mapItem)
{
return ItemFromContainer(mapItem);
return (FrameworkElement)base.ContainerFromItem(item);
}
}
}

View file

@ -2,6 +2,7 @@
// © 2018 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
@ -24,21 +25,21 @@ namespace MapControl
{
e.Handled = true;
(ItemsControl.ItemsControlFromItemContainer(this) as MapItemsControl)?.MapItemClicked(
(ItemsControl.ItemsControlFromItemContainer(this) as MapItemsControl)?.OnItemClicked(
this, Keyboard.Modifiers.HasFlag(ModifierKeys.Control), Keyboard.Modifiers.HasFlag(ModifierKeys.Shift));
}
}
public partial class MapItemsControl
{
public MapItem MapItemFromItem(object item)
public FrameworkElement ContainerFromItem(object item)
{
return (MapItem)ItemContainerGenerator.ContainerFromItem(item);
return (FrameworkElement)ItemContainerGenerator.ContainerFromItem(item);
}
public object ItemFromMapItem(MapItem mapItem)
public object ItemFromContainer(FrameworkElement container)
{
return ItemContainerGenerator.ItemFromContainer(mapItem);
return ItemContainerGenerator.ItemFromContainer(container);
}
public void SelectItemsInGeometry(Geometry geometry)