利用Silverlight中Path类实现跟随鼠标画线功能

本文探讨了在XAML中使用Canvas元素时,鼠标移动绘制线条功能延迟的问题,并提供了通过添加文本框显示鼠标坐标来即时描绘线条的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 xaml:
<Grid x:Name="LayoutRoot">
        <Canvas x:Name="print" Background="AliceBlue">
        </Canvas>
</Grid>

 

  后台代码:

private Path path;
        private PathFigure pf;
        private bool isMove;

        public Page1()
        {
            InitializeComponent();

            this.Loaded +=new RoutedEventHandler(Page1_Loaded);
        }

        // Executes when the user navigates to this page.
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        void Page1_Loaded(object sender, RoutedEventArgs e)
        {
            this.print.MouseLeftButtonDown +=
new MouseButtonEventHandler(print_MouseLeftButtonDown);
            this.print.MouseLeftButtonUp +=
new MouseButtonEventHandler(print_MouseLeftButtonUp);
            this.print.MouseMove +=new MouseEventHandler(print_MouseMove);

        }

        public void print_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            element.CaptureMouse();

            path = new Path()
            {
                Stroke = new SolidColorBrush(Colors.Red),
                StrokeThickness = 2
            };

            PathGeometry pg = new PathGeometry();
            pf = new PathFigure();
            pf.StartPoint = e.GetPosition(print);
            pg.Figures.Add(pf);
            path.Data = pg;
            print.Children.Add(path);

            isMove = true;
          
        }

        public void print_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            element.ReleaseMouseCapture();
            isMove = false;
        }

        public void print_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMove)
            {
                LineSegment lg = new LineSegment();
                lg.Point = e.GetPosition(print);
                pf.Segments.Add(lg);
            }
        }

  发现一个问题,在鼠标的移动的时候线无法马上显示出来,而是在再次点击鼠标的时候才能描绘出来。不知怎么解决。偶然发现在工作区内添加一个文本框显示鼠标的坐标时线就能立马的描绘出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值