经过很长时间,找到了解决此问题的方法。首先我们需要一些变量
private TouchPoint _movePoint;
private double _minimum = 0;
private double _maximum;
我需要捕捉 listBox 的 TouchMove 事件。此事件触发多次。我们需要获取触摸时的最大和最小 Y 值。
private void myListBox_TouchMove(object sender, TouchEventArgs e)
{
_movePoint := e.GetTouchPoint(myListBox);
if (_minimum.Equals(0))
{
_minimum := _movePoint.Position.Y;
_maximum := _movePoint.Position.Y;
return;
}
if (_movePoint.Position.Y < _minimum)
_minimum := _movePoint.Position.Y;
if (_movePoint.Position.Y > _maximum)
_maximum := _movePoint.Position.Y;
}
现在在 TouchUp 事件中,我们查看在垂直方向上滑动了多远。如果这不是很大(在此示例中低于 20),我们将查看 touchup 事件发生的位置并查找该位置的 ListBoxItem 并在该项目上设置 IsSelected=ture。
private void myListBox_TouchUp(object sender, TouchEventArgs e)
{
var difference = _maximum - _minimum;
_maximum = 0;
_minimum=0;
if(difference < 20)
{
var touchPosition = e.GetTouchPoint(myListBox)
UIElement elem = myListBox.InputHitTest(touchPosition.Position) as UIElement;
while (elem != null)
{
if (elem == myListBox)
return;
ListBoxItem item = elem as ListBoxItem;
if (item != null)
{
item.IsSelected = true;
return;
}
elem = VisualTreeHelper.GetParent(elem) as UIElement;
}
}
}
这应该有效。