後很長一段時間這個問題找到了解決辦法。 第一,我們都需要一些變量
private TouchPoint _movePoint;
private double _minimum = 0;
private double _maximum;
我需要趕上列表框的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;
}
現在在觸上事件,我們看多遠都在垂直方向上被滑動。如果這不是很大(在這個例子中低於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;
}
}
}
這應該有效。