我有一个类似于此的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,看起来一切正常?如果没有正确地自动初始化它们,有没有办法手动初始化它们?我做错了吗?
答案 0 :(得分:0)
代码运行如下:
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);
我希望这个'解决方案'对你来说足够好。对于我的英语不好,如果我有错误,我道歉,不是我的母语。