2015-02-05 5 views
0

У меня есть макет XAML, похожее на это:Почему мои элементы управления 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# codebehind я использую эти элементы управления, чтобы взять двойной из TextBox, еще несколько ints из ComboBoxes, затем создаю объект типа калькулятора с данными из элементов управления. Я делаю расчет и показываю результаты в некоторых других текстовых блоках.

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. Оказывается, все элементы управления XAML равны нулю. Однако для _contentLoaded установлено значение true и определение кода для this.IntializeComponent выглядит правильно за кулисами.

Почему все мои элементы управления имеют значение null, когда кажется, что все работает правильно? Есть ли способ инициализировать их вручную, если они не были правильно инициализированы автоматически? Я что-то делаю неправильно?

ответ

0

код запуска, как:

  1. Вычислено х = новый Calc();
  2. this.InitializeComponent();

Calc() был первым, чем InitializeComponent(), но InitializeComponent() создает элементы управления.

вы можете изменить:

Calc x; 

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

Я пробовал настроить Calc на всем протяжении места. Независимо от того, где создается Calc, мои элементы управления по-прежнему равны нулю. – avandyke

+0

где ваш вызов Calc()? – Cologler

+0

Calc ссылается только на метод calcIt(), который я изложил в своем первоначальном сообщении. Он никогда не используется нигде. Редактировать: Кроме того, объект Calc создается правильно со свойствами и значениями по умолчанию в каждом экземпляре, независимо от того, где он инициализируется кодом. Нулевой указатель конкретно ссылается на объект TextBox. – avandyke

0

У меня такая же проблема с некоторыми из моих элементов управления 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); 

Я надеюсь, что это «решение» достаточно хорошо для вас. И для моего бедного английского я прошу прощения, если у меня есть ошибки, это не мой родной язык.

Смежные вопросы