如何解决带有 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; 我在canvasChartContainer尝试了事件预览.....,mousemove,你可以通过下面的方法看到 感谢您对此的任何帮助。x:Name="grid1" Margin="10">
<WindowsFormsHost VerticalAlignment="Stretch" Background="Transparent" >
<mschart:Chart x:Name="myChart" Height="250" Width="900"
</WindowsFormsHost>
</Grid>
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 举报,一经查实,本站将立刻删除。