У меня есть список элементов управления, которые я отображаю через WrapPanel, и он расположен горизонтально.
Я реализовал технику прокрутки «Нажми и перетаскивай», чтобы пользователь прокручивал мышью, щелкая и перетаскивая.
Вот так:
<Canvas x:Name="ParentCanvas" PreviewMouseDown="Canvas_MouseDown" MouseMove="Canvas_MouseMove">
<WrapPanel>
<WrapPanel.RenderTransform>
<TranslateTransform />
</WrapPanel.RenderTransform>
<!-- controls are all in here ... -->
</WrapPanel>
</Canvas>
Тогда в коде позади:
private Point _mousePosition;
private Point _lastMousePosition;
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
_lastMousePosition = e.GetPosition(ParentCanvas);
e.Handled = true;
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
_mousePosition = e.GetPosition(ParentCanvas);
var delta = _mousePosition - _lastMousePosition;
if(e.LeftButton == MouseButtonState.Pressed && delta.X != 0)
{
var transform = ((TranslateTransform)_wrapPanel.RenderTransform).Clone();
transform.X += delta.X;
_wrapPanel.RenderTransform = transform;
_lastMousePosition = _mousePosition;
}
}
Это все отлично работает
Но я хочу сделать так, чтобы, когда пользователь щелкает мышью для перетаскивания, элементы внутри WrapPanel не отвечали (т.е. пользователь только просматривал), но когда пользователь нажимает (как в полный щелчок), а затем они отвечают на щелчок.
Точно так же, как работает iphone, когда вы нажимаете и перетаскиваете приложение, оно не открывается, а прокручивает экран, но когда вы нажимаете на приложение, оно запускается ...
Надеюсь, это имеет смысл.
Cheers,
Mark