WPF 鼠标拖拽平移

 

效果

xaml

<ScrollViewer x:Name="scrollViewer" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Disabled" Background="#FFF1ADAD"
                     PreviewMouseDown="ScrollViewer_OnPreviewMouseDown"
                     PreviewMouseMove="ScrollViewer_OnPreviewMouseMove"
                     PreviewMouseUp="ScrollViewer_OnPreviewMouseUp" 
                      >

            <StackPanel x:Name="stackPanel" Orientation="Horizontal" HorizontalAlignment="Left">
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick" />
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
                <Button Width="240" Height="100" Margin="10" Click="ButtonBase_OnClick"/>
            </StackPanel>
        </ScrollViewer>

 代码

 Point initialMousePoint = new();
        double horizontalOffset = 1;
        bool isMouseDown = false;
        private double mouseDist = 0;

        private void ScrollViewer_OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { 
            initialMousePoint = e.GetPosition(scrollViewer);
            horizontalOffset = scrollViewer.HorizontalOffset;
            isMouseDown = true;
            e.Handled = false;
        }

        private void ScrollViewer_OnPreviewMouseMove(object sender, MouseEventArgs e) {
            if (isMouseDown && e.LeftButton == MouseButtonState.Pressed) { 
                scrollViewer.ScrollToHorizontalOffset(horizontalOffset + (initialMousePoint.X - e.GetPosition(scrollViewer).X)); 
            }
            e.Handled = false;
        }

        private void ScrollViewer_OnPreviewMouseUp(object sender, MouseButtonEventArgs e) {
            isMouseDown = false;
            e.Handled = false; 
            mouseDist = (e.GetPosition(scrollViewer) - initialMousePoint).Length; 
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { 
            if (mouseDist < 1) { 
                if (sender is Button btn) {
                    btn.Content = DateTime.Now.Millisecond.ToString();
                }
            }
        }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值