尝试设置网格的可见性时,对象引用未设置错误

时间:2012-01-30 14:20:24

标签: wpf vb.net xaml reference grid

我试图从后面的代码中设置网格的可见性。

grdStopTimeOut.Visibility = Windows.Visibility.Visible

我在XAML中声明了这个网格,并将可见性设置为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

1 个答案:

答案 0 :(得分:3)

编辑:处理程序可以在网格初始化之前发生,因此需要进行空检查。

你在InitializeComponent之前打电话给我吗?那可以解释缺少引用,因为所有字段都与该方法中的命名控件相连接。