现在位置首页 / 项目实战 /正文

wpf教程-Wpf拖拽滑动效果

作者: IT小兵 | 2014年9月11日| 热度:℃ | 评论: |参与:

wpf其实支持拖拽是很简单的。使用drag事件或者自定义鼠标事件都是可以实现的。

今天分享一个用鼠标的点击和up事件实现的拖拽滑动效果。

首先在xaml中定义一个ScrollViewer。

<Window x:Class="Wpf拖拽滑动效果.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="680">
    <Grid>
        <ScrollViewer  Name="viewer" Grid.Column="0"  Grid.Row="1" Padding="0,0,0,0"  VerticalScrollBarVisibility="Auto">
            <Canvas Name="canvas" Margin="0,0,0,0" PreviewMouseDown="canvas_PreviewMouseDown" PreviewMouseMove="canvas_PreviewMouseMove" PreviewMouseUp="canvas_PreviewMouseUp">
                <Grid Name="NGEntry"  >
                     
                </Grid>
            </Canvas>
        </ScrollViewer>
    </Grid>
</Window>

后台模拟一下按钮数据:

   /// <summary>
        /// 创建按钮集合
        /// </summary>
        /// <param name="grid"></param>
        public void CreateNgEtry(ref Grid grid)
        {
            grid.Children.Clear();
            grid.RowDefinitions.Clear();
            grid.ColumnDefinitions.Clear();
            for (int i = 0; i < 6; i++)
            {
            }
            for (int i = 0; i < 18 + 1; i++)
            {
                grid.RowDefinitions.Add(new RowDefinition());
            }
            for (int i = 0; i < 18; i++)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition());
                for (int j = 0; j < 6; j++)
                {
                    Button but = new Button();
                    but.Height = 80;
                    but.Width = 110;
                    but.FontSize = 16;
                    grid.Children.Add(but);
                    System.Windows.Controls.Grid.SetColumn(but, j);
                    System.Windows.Controls.Grid.SetRow(but, i);
                    but.Content = "Test" + i.ToString();
                }
            }
        }

鼠标按下时的事件处理,记住当前的位置:

        private void canvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            targetElement = Mouse.DirectlyOver as UIElement;
            if (targetElement != null)
            {
                targetPoint = e.GetPosition(NGEntry);
            }
        }

当鼠标拖动时:

 private void canvas_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed && targetElement != null)
            {
                var pCanvas = e.GetPosition(canvas);
                double gridtop = Convert.ToDouble(NGEntry.GetValue(Canvas.TopProperty));
                NGEntry.SetValue(Canvas.TopProperty, pCanvas.Y - targetPoint.Y);
                 
            }
        }

当鼠标放下事件:

        private void canvas_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            double gridtop = Convert.ToDouble(NGEntry.GetValue(Canvas.TopProperty));
            double gridh = NGEntry.ActualHeight;
            double viewh = canvas.ActualHeight;
            if (gridtop > 0)
            {
                NGEntry.SetValue(Canvas.TopProperty, 0d);
            }
            if (viewh + (Math.Abs(gridtop)) > gridh)
            {
                NGEntry.SetValue(Canvas.TopProperty, viewh - gridh);
            }
        }


点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:[email protected]

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:[email protected]

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询