DataVizualization.Chart 中的 ContextMenu 由 WindowsFormsHost 托管
ContextMenu in DataVizualization.Chart hosted by WindowsFormsHost
我有一个 C# WPF 应用程序,其中的图表使用 System.Windows.Forms.DataVisualization。我有图表工作。它嵌入在 XAML 中的一个 WindowsFormsHost 中。我想在图表中添加一个 ContextMenu 以保存图像、更改图表缩放比例等。但是,我无法显示上下文菜单。主要 window 使用 GRID,如果我将上下文菜单添加到网格,则上下文菜单会出现在顶层菜单和状态栏上,但不会出现在图表上。由于图表占据了大部分 window 表面,最好将其显示在图表上方。
这是一个简化的 XAML,只有一个菜单项:
<WindowsFormsHost HorizontalAlignment="Stretch" Grid.Row="1" x:Name="wfh" SizeChanged="OnWindowSizeChanged" MouseDown="OnWindowsFormsHostMouseDown" Background="Transparent">
<WindowsFormsHost.ContextMenu>
<ContextMenu>
<MenuItem Header="Save Image" IsEnabled="true" Click="OnClickedSaveImage" ToolTip="Save an image of the chart"/>
</ContextMenu>
</WindowsFormsHost.ContextMenu>
<WindowsFormsHost.Child>
<mschart:Chart x:Name="nativechart"/>
</WindowsFormsHost.Child>
</WindowsFormsHost>
在我后面的代码中有:
private void OnWindowsFormsHostMouseDown(object sender, MouseButtonEventArgs e)
{
this.wfh.ContextMenu.IsOpen = true;
}
我使用了多种不同的选项来设置背景透明,将图表元素放在 WindowsFormsHost.Child 元素中,如图所示或直接放在 WindowsFormsHost 中。我无法使 ContextMenu 出现在图表上。有什么想法吗?
尝试处理 WinForms 控件的 MouseClick
事件:
<mschart:Chart x:Name="nativechart" MouseClick="nativechart_MouseClick"/>
private void nativechart_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
this.wfh.ContextMenu.IsOpen = true;
}
我有一个 C# WPF 应用程序,其中的图表使用 System.Windows.Forms.DataVisualization。我有图表工作。它嵌入在 XAML 中的一个 WindowsFormsHost 中。我想在图表中添加一个 ContextMenu 以保存图像、更改图表缩放比例等。但是,我无法显示上下文菜单。主要 window 使用 GRID,如果我将上下文菜单添加到网格,则上下文菜单会出现在顶层菜单和状态栏上,但不会出现在图表上。由于图表占据了大部分 window 表面,最好将其显示在图表上方。
这是一个简化的 XAML,只有一个菜单项:
<WindowsFormsHost HorizontalAlignment="Stretch" Grid.Row="1" x:Name="wfh" SizeChanged="OnWindowSizeChanged" MouseDown="OnWindowsFormsHostMouseDown" Background="Transparent">
<WindowsFormsHost.ContextMenu>
<ContextMenu>
<MenuItem Header="Save Image" IsEnabled="true" Click="OnClickedSaveImage" ToolTip="Save an image of the chart"/>
</ContextMenu>
</WindowsFormsHost.ContextMenu>
<WindowsFormsHost.Child>
<mschart:Chart x:Name="nativechart"/>
</WindowsFormsHost.Child>
</WindowsFormsHost>
在我后面的代码中有:
private void OnWindowsFormsHostMouseDown(object sender, MouseButtonEventArgs e)
{
this.wfh.ContextMenu.IsOpen = true;
}
我使用了多种不同的选项来设置背景透明,将图表元素放在 WindowsFormsHost.Child 元素中,如图所示或直接放在 WindowsFormsHost 中。我无法使 ContextMenu 出现在图表上。有什么想法吗?
尝试处理 WinForms 控件的 MouseClick
事件:
<mschart:Chart x:Name="nativechart" MouseClick="nativechart_MouseClick"/>
private void nativechart_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
this.wfh.ContextMenu.IsOpen = true;
}