2

这是我的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        //myOnlyGrid = new Grid();
        Chart MyChart = new Chart();
        ColumnSeries b = new ColumnSeries();

        b.Title = "B";

        b.IndependentValueBinding = new System.Windows.Data.Binding("Key");
        b.DependentValueBinding = new System.Windows.Data.Binding("Value");

        b.ItemsSource = new List<KeyValuePair<string, int>> {
                new KeyValuePair<string, int>("1", 100),
                new KeyValuePair<string, int>("2", 75),
                new KeyValuePair<string, int>("3", 150)
            };


        MyChart.Series.Add(b);

        Grid.SetColumn(MyChart, 0);

        Thread.Sleep(1000);
        myOnlyGrid.Children.Add(MyChart);

        InitializeComponent();
    }

和我的 XAML:

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid Name="myOnlyGrid">

</Grid>

出于某种原因,它编译得很好,但在到达 myOnlyGrid.Children.Add() 时会抛出 nullreferenceexception。我已经在谷歌上搜索了大约一个小时,但没有找到任何东西。

4

3 回答 3

4

myOnlyGrid.Children.Add(MyChart);

InitializeComponent()

myOnlyGrid仅在InitializeComponent调用中创建和初始化,并且在该行之前它只是 null 所以你基本上是在调用null.Children.Add(MyChart)它给出NullReferenceException

于 2013-06-12T21:54:36.390 回答
3

您应该调用InitializeComponent()构造函数的第一行。

此外,这不是放置此类代码的好地方。考虑 MVVM。

于 2013-06-12T21:54:49.480 回答
1

在 InitializeComponent() 调用之后移动所有代码。在此之前执行操作时,尚未创建网格的实例。

事实上,如果您对该方法进行定义,您会发现您编写的标记只是编写和执行代码的语法糖。并且一直如此。

于 2013-06-12T21:54:45.450 回答