2013-07-22 4 views
4

Я написал UserControl в WinRT, и я хочу сделать его подвижным с помощью пальца.
Когда я перемещаю его с помощью пера или мыши, он все еще движется, но не тогда, когда я использую палец.
PointerMoved не является триггерным, когда я использую палец.Как создать управляемый элемент управления в WinRT?

Вот простой XAML:

<UserControl> 
    <Rectangle PointerPressed="PointerPressed" PointerMoved="PointerMoved"/> 
</UserControl> 

и вот код:

private Point position; 

void PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{ 
    Rectangle r = sender as Rectangle; 
    var pointerPoint = e.GetCurrentPoint(r); 
    position = pointerPoint.Position; 
} 

void PointerMoved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{  
    Rectangle r = sender as Rectangle; 
    var delta = e.GetCurrentPoint(r).Position; 
    r.Margin = new Thickness(r.Margin.Left + delta.X - position.X, r.Margin.Top + delta.Y - position.Y, 0, 0); 
} 

Что мне не хватает здесь?

Edit:
Я работаю с Windows, 8.1 и VisualStudio 2013.
Может быть, это новая функция ^^

ответ

8

Это проще, чем вы думаете!

<Rectangle Width="100" Height="100" Fill="White" 
    ManipulationMode="TranslateX,TranslateY" 
    ManipulationDelta="Rectangle_ManipulationDelta_1" /> 

private void Rectangle_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    var _Rectangle = sender as Windows.UI.Xaml.Shapes.Rectangle; 
    var _Transform = (_Rectangle.RenderTransform as CompositeTransform) 
     ?? (_Rectangle.RenderTransform = new CompositeTransform()) as CompositeTransform; 
    _Transform.TranslateX += e.Delta.Translation.X; 
    _Transform.TranslateY += e.Delta.Translation.Y; 
} 

Удачи!

+0

Вот и все. спасибо. –

+0

Это было просто и sooperm thnku Джерри Никсон – FebinDonz

+0

Это превосходно в 80-е годы, я полагаю? Sooperm. Хехе. –

0

Во-первых, не уверен, что вы можете перемещаться с помощью пера или мыши, потому что в PointerMoved случае вы должны проверьте значение e.Pointer.IsInContact boolean, чтобы убедиться, что вы выбрали объект при перемещении. Это заставляет ваше движущееся действие выглядеть лучше.

Во-вторых, извините, что я не знаю, почему на вашей машине PointerMoved не срабатывает при использовании пальца. В любом случае это будет лучше, если вы зададите имя своей функции обработчика не так, как имя события.

Если вы можете поделиться дополнительной информацией, мы можем обсудить.

+0

Спасибо за ответ. Это всего лишь псевдокод. В реале я также проверяю pointerId и buttonPressed-state и т. Д. Имена событий также немного разные ... Единственная проблема, с которой я столкнулся, заключается в том, что PointerMoved не запускается на моем Surface Pro, когда я использую палец. Возможно, событие скрыто распознаванием жестов или что-то в этом роде? –

Смежные вопросы