簡體   English   中英

為什么我的XAML控件為null?

[英]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? 如果未正確自動初始化它們,是否可以手動對其進行初始化? 我做錯什么了嗎?

代碼運行如下:

  1. Calc x =新的Calc();
  2. this.InitializeComponent();

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM