来自文件的XAML作为元素

时间:2013-02-15 14:10:06

标签: wpf xaml

您好我想在程序启动时从外部文件加载我的元素。 以下是我的代码:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:FromFile3d" x:Class="FromFile3d.MainWindow"

    Title="MainWindow" Height="400" Width="800">

<Grid>
    <Grid.Background>
        <LinearGradientBrush EndPoint="0.789,0.541" StartPoint="0.225,0.543">
            <GradientStop Color="Black" Offset="0.849"/>
            <GradientStop Color="#FF232323" Offset="1"/>
        </LinearGradientBrush>
    </Grid.Background>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="527*"/>
        <ColumnDefinition Width="265*"/>
    </Grid.ColumnDefinitions>


    <Button Content="Button" Grid.Column="1" HorizontalAlignment="Left" Height="26" Margin="161,28,0,0" VerticalAlignment="Top" Width="75"/>
    <Viewport3D x:Name="_viewport3D"  />
</Grid>

以及带有加载方法的最后一个cs

private void LoadCore()
    {
        string path = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "test.xaml");
        if (path != null)
        {
            try
            {
                StreamReader mysr = new StreamReader(path);
                _viewport3D= XamlReader.Load(mysr.BaseStream) as Viewport3D;

            }
            catch (Exception e)
            {
                MessageBox.Show(
                    String.Format("Unable to parse file:\r\n\r\n{0}",
                    e.Message), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
    }

和我要加载的文件是我的场景和模型的Viewport3d定义,以/ Viewport3D结束(我无法粘贴它,不知道为什么)

我做错了什么?因为程序启动时没有任何反应,我的模型是不可见的:&gt; (这不是视口代码的问题,因为它在移动到外部文件之前工作正常)。

1 个答案:

答案 0 :(得分:0)

_viewport3D = XamlReader.Load(mysr.BaseStream) as Viewport3D;

您无法像这样操纵控制树。你应该添加元素。

首先,从您的XAML中删除Viewport3D

其次,给你的网格命名,比如_grid

第三,将上述行改为:

_grid.Children.Add(XamlReader.Load(mysr.BaseStream) as Viewport3D);

这是操纵控制树的合适方法。