2013-02-15 4 views
1

Привет, я хочу загрузить элемент во время запуска программы из внешнего файла. Ниже мой код: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> 

и для последнего сСт метода нагрузки

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 (я не мог вставить его, не знаю почему)

Что я делаю неправильно? потому что ничего не происходит, когда программа запускает мою модель, это невидимо:> (это не проблема с кодом видового экрана, потому что это нормально, прежде чем переходить во внешний файл).

+0

Я не помню, что вы можете * заменить * существующие элементы управления таким образом. –

ответ

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

Вы не можете манипулировать деревом управления таким образом. Вместо этого вы должны добавлять элементы.

Сначала удалите Viewport3D со своего XAML.

Во-вторых, дайте вашей сетке имя, скажем _grid.

В-третьих, изменить вышеупомянутую линию:

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

Это подходящий способ манипулировать дерева управления.

+0

Спасибо, мне потребовалось 6 часов, и я никуда не ушел :). Последний вопрос в моем внешнем xaml у меня есть рассказчик, который я хочу начать с главного окна, но используя Storyboard sb = (Storyboard) TryFindResource («MoveSB»); как обычно, не может найти мой элемент. Наверное, я не мог найти подобную проблему. – user1938408

+0

Возможно, вам лучше задать новый вопрос. –