如何将winform图表控件托管到WPF视图中?

时间:2014-08-30 08:03:56

标签: wpf winforms charts winforms-interop

我正在尝试使用winforms图表,它有许多图表控件,但我无法在wpf视图中使用此控件。我有这个axml代码:

<Window x:Class="WPFCharts.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:charts="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
        Title="MainWindow" Height="440.789" Width="863.158" Loaded="Window_Loaded">
    <Grid Name="grdgraficos">



        <TabControl VerticalAlignment="Stretch" Margin="0,0,0,0" HorizontalAlignment="Stretch">
            <TabItem Header="WPF Controls">
                <Grid Background="#FFE5E5E5">
                    <charts:Chart  Name="pieChart" Title="Pie Series Demo" Margin="0,0,0,0">
                        <charts:PieSeries DependentValuePath="y" 
                IndependentValuePath="campo" ItemsSource="{Binding}" 
                IsSelectionEnabled="True" />
                    </charts:Chart>
                </Grid>
            </TabItem>
            <TabItem Header="WinForms Controls">
                <Grid Background="#FFE5E5E5">
                    <WindowsFormsHost Name="wfhGraficoWinForm" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Bottom" />
                </Grid>
            </TabItem>
        </TabControl>

    </Grid>
</Window>

我有这个代码隐藏。到目前为止它是第一个解决方案,将来我将使用MVVM模式:

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.DataVisualization.Charting.Chart miGraficoWF = new System.Windows.Forms.DataVisualization.Charting.Chart();
            System.Windows.Forms.DataVisualization.Charting.Series miSerieWF = new System.Windows.Forms.DataVisualization.Charting.Series();
            miSerieWF.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar;
            miGraficoWF.Series.Clear();
            miGraficoWF.Series.Add(miSerieWF);
            miSerieWF.Points.AddY(2);
            miSerieWF.Points.AddY(5);
            miSerieWF.Points.AddY(1);

            wfhGraficoWinForm.Child = miGraficoWF;
        }

然而,控件未显示。

如果我创建一个winform项并使用相同的代码显示图表,那么我认为创建图表的代码是正确的,问题是我不知道如何显示winform控件一个wpf视图。

感谢。

1 个答案:

答案 0 :(得分:3)

问题不在于WPF / WinForms互操作层,而是在WinForms中。

您必须添加ChartArea

miGraficoWF.ChartAreas.Add("Default");