带有 Windows 窗体图表的 WPF 画布不会平移或拖动 ..... 但事件被触发

问题描述

我想我(几乎)尝试了所有方法,但没有找到使用图表平移或拖动画布的解决方案。
MainWindow (canvasChartContainer) 以编程方式“接收”一个 Windows 窗体图表用户控件

c# 背后的代码

canvasChartContainer.Children.Add(mychart);

主窗口.xaml

<Grid>
        <Canvas Name="canvasChartContainer"  Height="xxx" Width="yyy" Background="White"   events ??????>
        </Canvas>
        <Button x:Name="LineChart"  Content="Line Chart" Click="LineChart_Click" Width="120" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" Height="30"/>

    </Grid>

现在包含 Windows 窗体主机图表的 UserControl ("mschart") ......

xmlns:mschart="clr-namespace:System.Windows.Forms.DataVisualization.Charting;

x:Name="grid1" Margin="10">
        <windowsformshost VerticalAlignment="Stretch" Background="Transparent" >
            <mschart:Chart x:Name="myChart"  Height="250" Width="900"
        </windowsformshost>
    </Grid>

我在canvasChartContainer尝试了事件预览.....,mousemove,你可以通过下面的方法看到

   private void Canvas_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)
        {
            clickPosition = e.GetPosition(canvasChartContainer); // get click position
        }
        private void Canvas_MouseMove(object sender,System.Windows.Input.MouseEventArgs e)
        {
            if (e.LeftButton != MouseButtonState.Released)
            {
                System.Windows.Point mousePos = e.GetPosition(canvasChartContainer); // get absolute mouse position
                Canvas.SetLeft(canvasChartContainer,mousePos.X - clickPosition.X); // move canvas
                Canvas.SetTop(canvasChartContainer,mousePos.Y - clickPosition.Y);
            }
        }
        UIElement dragObject = null;
        System.Windows.Point offset;
        private void canvasChartContainer_PreviewMouseLeftButtonDown(object sender,MouseButtonEventArgs e)
        {
            this.dragObject = sender as UIElement;
            this.offset = e.GetPosition(this.canvasChartContainer);
            this.offset.Y -= Canvas.GetTop(this.dragObject);
            this.offset.X -= Canvas.GetLeft(this.dragObject);
            this.canvasChartContainer.CaptureMouse();
        }


        private void canvasChartContainer_PreviewMouseMove(object sender,System.Windows.Input.MouseEventArgs e)
        {
         if (this.dragObject == null)
                return;
            var position = e.GetPosition(sender as IInputElement);
            Canvas.SetTop(this.dragObject,position.Y - this.offset.Y);
            Canvas.SetLeft(this.dragObject,position.X - this.offset.X);

感谢您对此的任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)