为什么我的XAML控件为空?

时间:2015-02-05 03:12:45

标签: c# xaml windows-phone-8

我有一个类似于此的XAML布局:

<Grid>
    <TextBox x:Name="inputTextBox" LostFocus="inputTextBox_LostFocus" TextChanged="inputTextBox_TextChanged" GotFocus="inputTextBox_GotFocus" />
    <ComboBox x:Name="inputComboBox" SelectionChanged="inputComboBox_SelectionChanged">
        <ComboBoxItem IsSelected="True">10</ComboBoxItem>
        <ComboBoxItem>15</ComboBoxItem>
        <ComboBoxItem>20</ComboBoxItem>
    </ComboBox>
    <ComboBox x:Name="inputComboBoxTwo" SelectionChanged="inputComboBoxTwo_SelectionChanged">
        <ComboBoxItem IsSelected="True">1</ComboBoxItem>
        <ComboBoxItem>2</ComboBoxItem>
        <ComboBoxItem>3</ComboBoxItem>
    </ComboBox>
</Grid>

非常简单。在代码隐藏C#文件中,我使用这些控件从TextBox中获取一个double,从ComboBox中获取一些int,然后我用控件中的数据创建一个计算器类型对象。我进行计算并在其他一些TextBlocks中显示结果。

namespace TipCalc
{
    public sealed partial class MainPage : Page
    {
        Calc x = new Calc();

        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }

        //
        //Appropriate event handlers from XAML controls that all call the calculation method.
        //

        private void calcIt()
        { 
            x.amt = double.Parse(inputTextBox.Text);
            x.cal1 = int.Parse(inputComboBox.SelectedItem.ToString());
            x.cal2 = int.Parse(inputComboBoxTwo.SelectedItem.ToString());

            //Send calculated values to output TextBlocks.
        }
    }
}

当我运行这个程序时,我遇到了一个空指针异常,当我尝试访问TextBox的text属性时抛出该异常。事实证明,所有XAML控件都为null。但是,_contentLoaded设置为true,并且this.IntializeComponent的代码定义在后台看起来正确。

为什么我的所有控件都设置为null,看起来一切正常?如果没有正确地自动初始化它们,有没有办法手动初始化它们?我做错了吗?

2 个答案:

答案 0 :(得分:0)

代码运行如下:

  1. Calc x = new Calc();
  2. this.InitializeComponent();
  3. Calc()首先是InitializeComponent(),但InitializeComponent()创建了你的控件。

    你可以改为:

    Calc x;
    
    public MainPage()
    {
        this.InitializeComponent();
        x = new Calc();
        this.NavigationCacheMode = NavigationCacheMode.Required;
    }
    

答案 1 :(得分:0)

类初始化时,我的一些TextBox控件遇到了同样的问题。我为解决这个问题所做的并不是真正完美的解决方案,因为当类运行时并非所有控件(TextBox,ComboBox,RadioButton等)都为null,并且我的代码或我的应用程序或我的VS中发生了一些事情我我错过了或做错了......但至少现在工作正常。我希望对你有用:

if(TextBox1 == null)
{
     //I'm re-initializing the control because is null
     TextBox1 = new TextBox();
}

对于您的代码,它应该是这样的:

if(inputTextBox == null)
{
     inputTextBox.Text = new TextBox();
}

x.amt = double.Parse(inputTextBox.Text);

我希望这个'解决方案'对你来说足够好。对于我的英语不好,如果我有错误,我道歉,不是我的母语。