WPF x:引用thow对象引用未设置为对象的实例

时间:2015-09-29 15:55:12

标签: wpf visual-studio xaml

我正在使用WPF开发一个应用程序,并且由于某些原因Visual Studio在错误窗口中显示此异常:Object reference not set to an instance of an object

当我构建应用程序时,此错误仍然可见,但我的应用程序工作正常

这是我的XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <StackPanel Grid.Row="0" Grid.Column="0" Margin="5"
                HorizontalAlignment="Stretch" VerticalAlignment="Top" Orientation="Vertical">
        <CheckBox Name="cbPersonType" Content="Person Type" IsChecked="{Binding Path=IsPersonTypeVisible, Mode=TwoWay}" />
    </StackPanel>

    <StackPanel Grid.Row="0" Grid.Column="1" Margin="5"
                HorizontalAlignment="Stretch" VerticalAlignment="Top" Orientation="Vertical">
        <DataGrid Name="dgPersons">
            <DataGrid.Columns>
                <DataGridTextColumn Width="*" Header="Person Type"
                                    Visibility="{Binding Path=IsChecked, Source={x:Reference Name=cbPersonType}, Converter={StaticResource BooleanToVisibilityConverter}}"
                                        />
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</Grid>

此异常位于DataGridTextColumn上。 有人知道为什么以及这个错误是什么?

2 个答案:

答案 0 :(得分:2)

这只是我试图解释错误消息的理论。

现在我正在努力解决类似案件。但是,我在上下文菜单中有我的复选框,显示数据网格中的列。用户可以检查他/她想要在数据网格中看到的列。

问题是,在用户实际右键单击以打开上下文菜单之前,似乎不会初始化复选框。在此之前,datagrid只显示没有列的空行。

在上下文菜单中加载复选框之前,似乎x:Reference没有启动。

contextmenu和datagrid的简化XAML如下所示。

<DataGrid ItemsSource="{Binding OrderCollection}" AutoGenerateColumns="False"  IsReadOnly="True" >
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Columnsetup">
                <CheckBox x:Name="chkHeadOrderNo" Content="Ordernumber" IsChecked="{Binding columnVisibilityHeadOrderNo}"/>
            </MenuItem>
        </ContextMenu>
    </DataGrid.ContextMenu>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding OrderNo}" Header="Ordernumber" 
                            Visibility="{Binding Source={x:Reference chkHeadOrderNo}, Path=IsChecked, Converter={StaticResource convertVisibility}}"/>
    </DataGrid.Columns>
</DataGrid> 

答案 1 :(得分:-1)

我建议更换 Source={x:Reference Name=cbPersonType} ElementName=cbPersonType public byte[] extractBytes (String ImageName) throws IOException { File imgPath = new File(ImageName); BufferedImage bufferedImage = ImageIO.read(imgPath); WritableRaster raster = bufferedImage .getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); return ( data.getData() ); } 。这在设计和运行时模式下都可以正常工作