2012-01-30 3 views
0

グリッドの可視性をコードの背後から設定しようとしました。グリッドの可視性を設定しようとしたときにオブジェクト参照が設定されていません

grdStopTimeOut.Visibility = Windows.Visibility.Visible 

私はこのグリッドをXAMLで宣言し、VisibilityをVisibleに設定しました。

<Grid Name="grdTimeTStopCondition" Visibility="Hidden" Margin="0,29,0,-6"> 

何とかアプリケーションが実行されると、グリッドが何も起こらず、例外がスローされます。 誰もがなぜそれが起こっているか考えている?

XAMLファイル

<Page x:Class="Page1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300" 
    Title="Page1"> 
<Grid> 
    <ComboBox Height="23" HorizontalAlignment="Left" Name="cmbStopConditions" VerticalAlignment="Top" Width="86" SelectedIndex="0"> 
     <ComboBoxItem Content="Expression"></ComboBoxItem> 
     <ComboBoxItem Content="Manual"></ComboBoxItem> 
    </ComboBox> 
    <Grid Name="grdStopTimeOut" Visibility="Visible" > 
     <Label Content="Timeout" Height="28" HorizontalAlignment="Left" Name="lblTimeout_stopcond" VerticalAlignment="Top" Margin="0,29,0,0" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Name="txtStopTimeout" VerticalAlignment="Top" Width="30" Margin="60,29,0,0" /> 
     <Label Content="secs" Height="28" HorizontalAlignment="Left" Name="lblTimeoutSec_stopCond" VerticalAlignment="Top" Width="39" Margin="105,24,0,0" /> 
    </Grid> 
</Grid> 
</Page> 

分離コード

Class Page1 

Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

End Sub 
Private Sub cmbStopConditions_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles cmbStopConditions.SelectionChanged 
    Dim item As ComboBoxItem = TryCast(cmbStopConditions.SelectedItem, ComboBoxItem) 
    If item IsNot Nothing Then 
     If Convert.ToString(item.Content) = "Expression" Then 
      grdStopTimeOut.Visibility = Windows.Visibility.Visible 
     ElseIf Convert.ToString(item.Content) = "Manual" Then 
      grdStopTimeOut.Visibility = Windows.Visibility.Hidden 
     End If 
    End If 
End Sub 

エンドクラス

に関して、

SKB

+0

マークアップの可視性をコードの背後にのみ設定しようとしましたか? –

+0

CodeBehindはどのように見えますか?コンポーネントを正しく初期化していない可能性があります – MethodMan

+0

@Daniel Casserlyはい、これを試しました。しかし、同じエラー!!! – Swa

答えて

3

編集:ハンドラは、グリッドが初期化される前に発生する可能性があるため、ヌルチェックが順番に行われます。

InitializeComponentの前に電話していますか?これは、すべてのフィールドがそのメソッド内の指定されたコントロールに接続されているため、参照の不足を説明するものです。

+0

はい、私はそれをやっています。私はvisiblityを設定すると、何もエラーをスローされていない同じファイル内の別のグリッドを持っている! – Swa

+0

@スワ:あなたはリファレンスをいくつかnullにしておらず、リファレンスはXAMLで作成されていますが、あなたではありませんか? –

+0

あなたが正しく設定していないか、あなたがいなくなっている何かが必要なコードを投稿することができますか?プロパティをどのように設定するかの順序と同じように単純なものになります。 – MethodMan

関連する問題