WPF XamlObjectWriterException:无法创建未知类型"Grid"

  using (FileStream fs = new FileStream("UnitFile/Report2.xaml", FileMode.Open))
            {
                rootElement = (FrameworkElement)XamlReader.Load(fs);
            }

在用XamlReader.Load时,报错。

Report2.xaml文件的内容如下:

<Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="25" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions> 
        <Border Style="{DynamicResource BorderEditStyle}">
            <WrapPanel Style="{StaticResource WrapPanelEditStyle}">
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="名称"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="型号"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="制单人"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="制单日期"/>
                    <DatePicker  Style="{StaticResource DateEditStyle}"/>
                </StackPanel>

                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="计划数量"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="合格数量"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="报废数量"/>
                    <TextBox Style="{StaticResource TextEditStyle}"/>
                </StackPanel>
                <StackPanel Style="{StaticResource StackPanelEditStyle}">
                    <Label Style="{StaticResource LableEditStyle}" Content="返修数量111"/>
                    <DatePicker  Style="{StaticResource DateEditStyle}"/>
                </StackPanel>
            </WrapPanel>
        </Border>
       <Button Height="25" Width="50" Grid.Row="1"  Content="test" Command="{Binding AddCommand}"/>
        <DataGrid Grid.Row="2" ItemsSource="{Binding list}" AutoGenerateColumns="False"  
                    >
           
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="选择"  
                                        Binding="{Binding FIsChecked}"/>
                <DataGridTextColumn Header="名称" Binding="{Binding FName}"/>
                
                <DataGridTextColumn Header="出生年月" Binding="{Binding FBirth}"/>
                <DataGridTextColumn Header="家庭住址" Binding="{Binding FAddress}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
View Code

查了下资料说需要添加一些引用。

我也不知道需要添加哪几个引用。于是我就用如下代码将上面的界面导出来

using (FileStream fs = new FileStream(
            System.IO.Path.Combine(Environment.CurrentDirectory, "saved.xaml"),
            FileMode.Create, FileAccess.Write))
                        {
                            XamlWriter.Save(mainCanvas, fs);//mainCanvas为你的grid的Name
                            fs.Close();
                        }

导出的结果如下

于是我就将这几个引用添加到Report2.xaml中。再通过XamlReader.Load()方法就可以成功加载了。

原文地址:https://www.cnblogs.com/czly/p/10121900.html