2013-07-28 78 views
0

我是WPF中的新成員,我希望根據ComboBox值從後面的代碼隱藏/顯示像TextBlock,ComboBox等一些控件。我搜索了一些解決方案,但沒有運氣。我經常聽到下面的答案。WPF Controls Visibilty

textbox1.Visibility = Visibility.Hidden;

所以,我試過這個。

private void cbBuscar_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     MessageBox.Show(cbBuscar.SelectedIndex.ToString()); 

     if (cbBuscar.SelectedIndex == 0) 
     { 
      cbProduto.Visibility = Visibility.Hidden; 
     } 
     else if (cbBuscar.SelectedIndex == 1) 
     { 
      cbProduto.Visibility = Visibility.Visible; 
     } 
     else if (cbBuscar.SelectedIndex == 2) 
     { 
      cbProduto.Visibility = Visibility.Collapsed; 
     } 
    } 

它簡單不起作用。嘗試我得到這個錯誤{「對象引用未設置爲對象的實例。」}

做我想要的一定不難,其實它一定很容易。那麼,誰能說出我做錯了什麼?

由於提前

+1

是異常在組合框或其他Sumwhere選擇項目即將? – ethicallogics

+0

您的cbProduto可能爲空。 – Nitesh

+1

嘗試在調試器中運行它並查看cbBuscar或cbProduto是否爲空。 –

回答

1

嘗試將下面的代碼你cbBuscar_SelectionChanged函數中:

if (!IsLoaded) 
    return; 

如果窗口初始化之前的選擇是變化的,這可能會解決問題。

所以,你的功能應該是這樣的:

private void cbBuscar_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (!IsLoaded) 
     return; 

    MessageBox.Show(cbBuscar.SelectedIndex.ToString()); 

    if (cbBuscar.SelectedIndex == 0) 
    { 
     cbProduto.Visibility = Visibility.Hidden; 
    } 
    else if (cbBuscar.SelectedIndex == 1) 
    { 
     cbProduto.Visibility = Visibility.Visible; 
    } 
    else if (cbBuscar.SelectedIndex == 2) 
    { 
     cbProduto.Visibility = Visibility.Collapsed; 
    } 
} 
+0

非常感謝你明,你明白了! 你能告訴我爲什麼會發生這種情況,使用這種方式我的代碼不會在頁面的加載中運行,爲什麼我應該這樣做?我可以設置一些控件爲隱藏默認,但必須另一種方式來驗證OnLoad,任何建議? –

+0

您需要在窗口構造函數中的'InitializeComponent()'調用之後調用該函數。問題是,在初始化過程中,一些控件尚未創建。這會導致問題,就像你的情況一樣,如果一些控件引發引用其他未初始化的控件的事件,那麼就是Nul​​lReferenceException。 –

+0

我明白了。非常感謝你! –