[英]Why are my XAML controls null?
我有一個類似於以下內容的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中獲取一個雙精度,從ComboBoxes中獲取一些更多的整數,然后使用來自控件的數據創建一個計算器類型的對象。 我進行計算並在其他一些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,並且此代碼定義。IntializeComponent在幕后看起來正確。
當看起來一切正常時,為什么將所有控件都設置為null? 如果未正確自動初始化它們,是否可以手動對其進行初始化? 我做錯什么了嗎?
代碼運行如下:
Calc()首先於InitializeComponent(),但InitializeComponent()創建您的控件。
您可以更改為:
Calc x;
public MainPage()
{
this.InitializeComponent();
x = new Calc();
this.NavigationCacheMode = NavigationCacheMode.Required;
}
類初始化時,我的一些TextBox控件也遇到相同的問題。 我要做的並不是真正完美的解決方案,因為在類運行時並非所有控件(TextBox,ComboBox,RadioButton等)都為空,並且代碼,應用程序或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);
我希望這個“解決方案”對您足夠好。 對於我的英語不好,如果我有錯誤,我表示歉意,這不是我的母語。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.