c # - Hvorfor er min StackPanel ikke i den genererede klasse? (NullReferenceException)

Indlæg af Hanne Mølgaard Plasc

Problem




    Dette spørgsmål har allerede et svar her:

    

            

  •             Hvad er en NullReferenceException, og hvordan reparerer jeg det?
                    
                        33 svar
                    

            

  •     

Bedste reference


Når undtagelsen er kastet? ved opstart af vinduet, eller efter at du har trykket på afkrydsningsfeltet? /questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it


Hvis det er i starten, er det måske fordi checkBox2\_Checked () kaldes under initializecompenents (), mens stackPanelListbox endnu ikke er angivet.

Andre referencer 1


Jeg tror checkBox2.IsChecked er null.

Prøv dette:


stackPanelListbox.Visibility = (checkBox2.IsChecked ?? false) ?
                               Visibility.Visible : Visibility.Collapsed;

Andre referencer 2


Hvis du kun vil skjule eller vise StackPanel i din arrangementshåndterer, kan du bruge dataindbinding i stedet:


<Window x:Class="ch0103.WPF.LayoutWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <StackPanel Name="stackPanelMain">
        <WrapPanel>
            <!-- Note the removed event handlers here: -->
            <CheckBox Name="checkBox1" VerticalAlignment="Center" IsThreeState="False" IsChecked="True" Content="Button StackPanel" Margin="0,0,11,0" />
            <CheckBox Content="Listbox StackPanel" Height="16" Name="checkBox2" IsChecked="True" IsThreeState="False" />
        </WrapPanel>
        <Grid Name="grid1" ShowGridLines="True">
            <!-- This one is used to convert checkbox state to visibility -->
            <Grid.Resources>
                <BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
            </Grid.Resources>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <!-- Additional Binding attributes in both StackPanel elements: -->
            <StackPanel HorizontalAlignment="Left" Name="stackPanelButtons" VerticalAlignment="Top" Visibility="{Binding IsChecked, ElementName=checkBox1, Converter={StaticResource BoolToVisConverter}}">
                <Button Content="Button" Height="23" Name="button1" />
                <Button Content="Button" Height="23" Name="button2" />
            </StackPanel>
            <StackPanel Name="stackPanelListbox" Grid.Column="1" Visibility="{Binding IsChecked, ElementName=checkBox2, Converter={StaticResource BoolToVisConverter}}">
                <ListBox HorizontalAlignment="Left" Name="listBox1" VerticalAlignment="Top" Width="200">
                    <ListBoxItem Content="Test" />
                    <ListBoxItem Content="Test" />
                </ListBox>
            </StackPanel>
        </Grid>
    </StackPanel>
</Window>


Denne tilgang giver dig mulighed for at fjerne begivenhedshåndtererne. Så du ville ikke løbe ind i initialiseringsordrefejl.

Andre referencer 3


Prøv at fjerne Grid.Column = 2 fra xaml i ListBox.