zl程序教程

您现在的位置是:首页 >  后端

当前栏目

wpf canvas移动

WPF 移动 Canvas
2023-09-14 09:10:46 时间
  <Border Name="outside" Grid.Column="1" Background="LightBlue" 
                PreviewMouseDown="outsidewrapper_PreviewMouseDown" 
                PreviewMouseMove="outsidewrapper_PreviewMouseMove" 
                PreviewMouseUp="outside_PreviewMouseUp"
                PreviewMouseWheel="outside_PreviewMouseWheel"
                ClipToBounds="True">
 
            <Canvas Name="inside" Width="{Binding Path=ActualWidth,RelativeSource={RelativeSource AncestorType=Border}}" 
                    Height="{Binding Path=ActualHeight,RelativeSource={RelativeSource AncestorType=Border}}">
                <Canvas.RenderTransform>
                    <TransformGroup/>
                </Canvas.RenderTransform>
                <Line Canvas.Left="50" Canvas.Top="50" X1="100" Y1="200"  X2="100" Y2="200" Stroke="Black" StrokeThickness="5"/>
                <Rectangle Canvas.Left="150" Canvas.Top="150" Width="380" Height="296" Fill="Red" />
 
            </Canvas>
        </Border>
 private Point previousPoint;
        private bool isTranslateStart = false;
        private void outside_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed&&e.RightButton== MouseButtonState.Released)
            {
                previousPoint = e.GetPosition(outside);
                isTranslateStart = true;
            }
        }

        private void outside_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released)
            {
                if (isTranslateStart)
                {
                    Point curPoint = e.GetPosition(outside);
                    Vector v = curPoint - previousPoint;
                    TransformGroup t = inside.RenderTransform as TransformGroup;
                    if (t == null)
                        t = new TransformGroup();
                    t.Children.Add(new TranslateTransform(v.X, v.Y));
                    inside.RenderTransform = t;
                    previousPoint = curPoint;
                }
            }
            e.Handled = true;
        }

        private void outside_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released)
            {
                if (isTranslateStart)
                {
                    isTranslateStart = false;
                }
            }
            e.Handled = true;
        }

        private void outside_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            Point curPoint = e.GetPosition(outside);
            TransformGroup tg = inside.RenderTransform as TransformGroup;
            if (tg == null)
                tg = new TransformGroup();
            double s = ((double)e.Delta) / 1000.0 + 1.0;
            tg.Children.Add(new ScaleTransform(s, s, curPoint.X, curPoint.Y));
            e.Handled = true;
        }