mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2026-04-04 22:18:56 +00:00
Map and MapItem input handling
This commit is contained in:
parent
9da6a13950
commit
74d3a4adfe
8 changed files with 241 additions and 104 deletions
|
|
@ -62,11 +62,24 @@ namespace MapControl
|
|||
base.OnPointerWheelChanged(e);
|
||||
}
|
||||
|
||||
protected override void OnPointerPressed(PointerPressedEventArgs e)
|
||||
protected override void OnPointerMoved(PointerEventArgs e)
|
||||
{
|
||||
var point = e.GetCurrentPoint(this);
|
||||
|
||||
if (pointer1 == null && point.Pointer.Type == PointerType.Mouse && point.Properties.IsLeftButtonPressed ||
|
||||
if (point.Pointer == pointer1 || point.Pointer == pointer2)
|
||||
{
|
||||
if (pointer2 != null)
|
||||
{
|
||||
HandleManipulation(point.Pointer, point.Position);
|
||||
}
|
||||
else if (point.Pointer.Type == PointerType.Mouse || ManipulationModes.HasFlag(ManipulationModes.Translate))
|
||||
{
|
||||
TranslateMap(new Point(point.Position.X - position1.X, point.Position.Y - position1.Y));
|
||||
position1 = point.Position;
|
||||
}
|
||||
}
|
||||
else if (
|
||||
pointer1 == null && point.Pointer.Type == PointerType.Mouse && point.Properties.IsLeftButtonPressed && e.KeyModifiers == KeyModifiers.None ||
|
||||
pointer2 == null && point.Pointer.Type == PointerType.Touch && ManipulationModes != ManipulationModes.None)
|
||||
{
|
||||
point.Pointer.Capture(this);
|
||||
|
|
@ -83,7 +96,7 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
base.OnPointerPressed(e);
|
||||
base.OnPointerMoved(e);
|
||||
}
|
||||
|
||||
protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e)
|
||||
|
|
@ -102,26 +115,6 @@ namespace MapControl
|
|||
base.OnPointerCaptureLost(e);
|
||||
}
|
||||
|
||||
protected override void OnPointerMoved(PointerEventArgs e)
|
||||
{
|
||||
if (e.Pointer == pointer1 || e.Pointer == pointer2)
|
||||
{
|
||||
var position = e.GetPosition(this);
|
||||
|
||||
if (pointer2 != null)
|
||||
{
|
||||
HandleManipulation(e.Pointer, position);
|
||||
}
|
||||
else if (e.Pointer.Type == PointerType.Mouse || ManipulationModes.HasFlag(ManipulationModes.Translate))
|
||||
{
|
||||
TranslateMap(new Point(position.X - position1.X, position.Y - position1.Y));
|
||||
position1 = position;
|
||||
}
|
||||
}
|
||||
|
||||
base.OnPointerMoved(e);
|
||||
}
|
||||
|
||||
private void HandleManipulation(IPointer pointer, Point position)
|
||||
{
|
||||
var oldDistance = new Vector(position2.X - position1.X, position2.Y - position1.Y);
|
||||
|
|
|
|||
|
|
@ -11,14 +11,28 @@
|
|||
|
||||
protected override void OnPointerPressed(PointerPressedEventArgs e)
|
||||
{
|
||||
if (e.KeyModifiers.HasFlag(KeyModifiers.Shift))
|
||||
if (e.Pointer.Type == PointerType.Touch)
|
||||
{
|
||||
e.Handled = true;
|
||||
MapItemsControl.SelectItemsInRange(this);
|
||||
UpdateSelection(e);
|
||||
}
|
||||
else
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
protected override void OnPointerReleased(PointerReleasedEventArgs e)
|
||||
{
|
||||
UpdateSelection(e);
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void UpdateSelection(PointerEventArgs e)
|
||||
{
|
||||
if (ItemsControl.ItemsControlFromItemContainer(this) is MapItemsControl mapItemsControl)
|
||||
{
|
||||
base.OnPointerPressed(e);
|
||||
mapItemsControl.UpdateSelection(this,
|
||||
e.KeyModifiers.HasFlag(KeyModifiers.Control),
|
||||
e.KeyModifiers.HasFlag(KeyModifiers.Shift));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,5 +56,50 @@ namespace MapControl
|
|||
mapItem.ClearValue(MapItem.LocationProperty);
|
||||
}
|
||||
}
|
||||
|
||||
internal void UpdateSelection(MapItem mapItem, bool controlKeyPressed, bool shiftKeyPressed)
|
||||
{
|
||||
if (SelectionMode != SelectionMode.Single && shiftKeyPressed)
|
||||
{
|
||||
SelectItemsInRange(mapItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateSelection(mapItem, true, false, controlKeyPressed);
|
||||
}
|
||||
|
||||
//var item = ItemFromContainer(mapItem);
|
||||
|
||||
//if (SelectionMode == SelectionMode.Single)
|
||||
//{
|
||||
// if (SelectedItem != item)
|
||||
// {
|
||||
// SelectedItem = item;
|
||||
// }
|
||||
// else if (controlKeyPressed)
|
||||
// {
|
||||
// SelectedItem = null;
|
||||
// }
|
||||
//}
|
||||
//else if (controlKeyPressed)
|
||||
//{
|
||||
// if (SelectedItems.Contains(item))
|
||||
// {
|
||||
// SelectedItems.Remove(item);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// SelectedItems.Add(item);
|
||||
// }
|
||||
//}
|
||||
//else if (shiftKeyPressed)
|
||||
//{
|
||||
// SelectItemsInRange(mapItem);
|
||||
//}
|
||||
//else if (SelectedItem != item || SelectedItems.Count != 1)
|
||||
//{
|
||||
// SelectedItem = item;
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue