WPF create a list of controls that can be scrolled via the mouse but still remain functional

Posted by Mark on Stack Overflow See other posts from Stack Overflow or by Mark
Published on 2010-03-11T04:06:56Z Indexed on 2010/03/11 4:39 UTC
Read the original article Hit count: 268

Filed under:
|
|

I have a list of controls that I am displaying via a WrapPanel and it horizontally oriented.

I have implemented a "Click and Drag" scrolling technique so that the user scrolls with the mouse via clicking and dragging.

Like so:

<Canvas x:Name="ParentCanvas" PreviewMouseDown="Canvas_MouseDown" MouseMove="Canvas_MouseMove">
  <WrapPanel>
    <WrapPanel.RenderTransform>
      <TranslateTransform />
    </WrapPanel.RenderTransform> 

    <!-- controls are all in here ... -->
  </WrapPanel>
</Canvas>

Then in the code behind:

    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;
        }
    }

This all works fine

But what I want to do is make it so that when a users clicks to drag, the items within the WrapPanel dont respond (i.e. the user is only browsing), but when the user clicks (as in a full click) then they do respond to the click.

Just like how the iphone works, when you press and drag directly on an app, it does not open the app, but rather scrolls the screen, but when you tap the app, it starts...

I hope this makes sense.

Cheers, Mark

© Stack Overflow or respective owner

Related posts about wpf

Related posts about c#