none
Page.xaml RRS feed

  • Domanda

  • Ciao a tutti,

    qualcuno potrebbe darmi qualche suggerimento su come utilizzare questo codice per caricare le Page che si trovano in una cartella nell'applicazione ?

    in sostanze le Page vengono copiate nella cartella da''utente finale, e il sistema deve caricare in automatico.

    per poi visualizzarle in una listview

                NavigationService nav = NavigationService.GetNavigationService(this);
                nav.Navigate(new Uri("Page1.xaml", UriKind.Relative));

    se lancio in esecuzione mi da l'errore:

    Riferimento a un oggetto non impostato su un'istanza di oggetto.

    in sostanza devo visualizzare questo codice generato da Rhinoceros:

    <Page Background="sc#1 0.627450980392157 0.627450980392157 0.627450980392157" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Viewport3D>
        <Viewport3D.Camera>
          <PerspectiveCamera x:Name="Cam" FieldOfView="41.3272182697382" Position="19166.5955467435, -2552.88696484449, 3773.2460181979" LookDirection="0.684034861025096, 0.459652350886002, -0.566406236924832" UpDirection="0.470124135002247, 0.315910308340419, 0.824126188622016" />
        </Viewport3D.Camera>
        <Viewport3D.Children>
          <ModelVisual3D>
            <ModelVisual3D>
              <ModelVisual3D.Content>
                <Model3DGroup>
                  <DirectionalLight Color="sc#1 1 1 1" Direction="0.684034861025096,0.459652350886002,-0.566406236924832" />
                  <GeometryModel3D x:Name="PCU611">
                    <GeometryModel3D.Material>
                      <MaterialGroup>
                        <DiffuseMaterial>
                          <DiffuseMaterial.Brush>
                            <SolidColorBrush Color="#FFFFFF" />
                          </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                        <EmissiveMaterial>
                          <EmissiveMaterial.Brush>
                            <SolidColorBrush Color="#000000" />
                          </EmissiveMaterial.Brush>
                        </EmissiveMaterial>
                      </MaterialGroup>
                    </GeometryModel3D.Material>
                    <GeometryModel3D.Geometry>
                      <MeshGeometry3D Positions="21863.9,-1433.781,1699.688 21863.9,-1433.781,1999.688 21863.9,-1783.04,1699.688 21863.9,-1783.04,1999.688 21863.9,-1783.04,1699.688 21863.9,-1783.04,1999.688 21889.7,-1783.04,1699.688 21889.7,-1783.04,1999.688 21889.7,-1783.04,1699.688 21889.7,-1783.04,1999.688 21889.7,-1433.781,1699.688 21889.7,-1433.781,1999.688 21889.7,-1433.781,1699.688 21889.7,-1433.781,1999.688 21863.9,-1433.781,1699.688 21863.9,-1433.781,1999.688 21889.7,-1433.781,1699.688 21889.7,-1783.04,1699.688 21863.9,-1433.781,1699.688 21863.9,-1783.04,1699.688 21889.7,-1433.781,1999.688 21889.7,-1783.04,1999.688 21863.9,-1433.781,1999.688 21863.9,-1783.04,1999.688" Normals="-1,0,0 -1,0,0 -1,0,0 -1,0,0 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,1,0 0,1,0 0,1,0 0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,1" TextureCoordinates="0,1 0,1 0,1 0,1 -0.6831807,0.5 -0.6831807,0.5 -0.6093101,0.5 -0.6093101,0.5 0.07087908,1 0.07087908,1 0.0708791,1 0.0708791,1 0.461569,0.5 0.461569,0.5 0.5354396,0.5 0.5354396,0.5 0.461569,0.5 0.461569,0.335801482200623 0.5354396,0.5 0.5354396,0.335801482200623 0.461569,0.5 0.461569,0.335801482200623 0.5354396,0.5 0.5354396,0.335801482200623" TriangleIndices="1,0,2 5,4,6 9,8,10 13,12,14 17,19,18 21,20,22 1,2,3 5,6,7 9,10,11 13,14,15 17,18,16 21,22,23" />
                    </GeometryModel3D.Geometry>
                  </GeometryModel3D>
                  <GeometryModel3D x:Name="PCU610">
                    <GeometryModel3D.Material>
                      <MaterialGroup>
                        <DiffuseMaterial>
                          <DiffuseMaterial.Brush>
                            <SolidColorBrush Color="#FFFFFF" />
                          </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                        <EmissiveMaterial>
                          <EmissiveMaterial.Brush>
                            <SolidColorBrush Color="#000000" />
                          </EmissiveMaterial.Brush>
                        </EmissiveMaterial>
                      </MaterialGroup>
                    </GeometryModel3D.Material>
                    <GeometryModel3D.Geometry>
                      <MeshGeometry3D Positions="21863.9,-1081.521,1699.688 21863.9,-1081.521,1999.688 21863.9,-1430.781,1699.688 21863.9,-1430.781,1999.688 21863.9,-1430.781,1699.688 21863.9,-1430.781,1999.688 21889.7,-1430.781,1699.688 21889.7,-1430.781,1999.688 21889.7,-1430.781,1699.688 21889.7,-1430.781,1999.688 21889.7,-1081.521,1699.688 21889.7,-1081.521,1999.688 21889.7,-1081.521,1699.688 21889.7,-1081.521,1999.688 21863.9,-1081.521,1699.688 21863.9,-1081.521,1999.688 21889.7,-1081.521,1699.688 21889.7,-1430.781,1699.688 21863.9,-1081.521,1699.688 21863.9,-1430.781,1699.688 21889.7,-1081.521,1999.688 21889.7,-1430.781,1999.688 21863.9,-1081.521,1999.688 21863.9,-1430.781,1999.688" Normals="-1,0,0 -1,0,0 -1,0,0 -1,0,0 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,1,0 0,1,0 0,1,0 0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,1" TextureCoordinates="0,1 0,1 0,1 0,1 -0.6831807,0.5 -0.6831807,0.5 -0.6093101,0.5 -0.6093101,0.5 0.07087908,1 0.07087908,1 0.0708791,1 0.0708791,1 0.461569,0.5 0.461569,0.5 0.5354396,0.5 0.5354396,0.5 0.461569,0.5 0.461569,0.335801482200623 0.5354396,0.5 0.5354396,0.335801482200623 0.461569,0.5 0.461569,0.335801482200623 0.5354396,0.5 0.5354396,0.335801482200623" TriangleIndices="1,0,2 5,4,6 9,8,10 13,12,14 17,19,18 21,20,22 1,2,3 5,6,7 9,10,11 13,14,15 17,18,16 21,22,23" />
                    </GeometryModel3D.Geometry>
                  </GeometryModel3D>...............

    ..................................


    fabio miceli



    domenica 19 gennaio 2020 00:14

Tutte le risposte

  • Il NavigationService lo puoi ottenere da un oggetto Page. Probabilmente tu lo stai chiedendo ad un oggetto Window e quindi la variabile nav è null.


    • Modificato BlueLed domenica 19 gennaio 2020 10:09
    domenica 19 gennaio 2020 10:08
  • Ho risolto inserendo un oggetto frame nella pagina:

    <Frame x:Name="navFrame" Grid.Row="5" Grid.Column="0"/>

    navFrame.NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative));


    fabio miceli

    domenica 19 gennaio 2020 11:37
  • Come posso fare per far caricare all'applicazione quel codice xaml generato da Rhinoceros ?

    genera soltalnto il codice xaml, la pagina .cs non la crea

    non so se sono riuscito a spiegarmi bene.......


    fabio miceli

    domenica 19 gennaio 2020 11:45
  • Non è chiaro. Ma se hai del codice associato a quella pagina in file .cs tanto vale che compili pagina e code behind in un nuovo assembly, magari come usercontrol, e poi lo carichi a runtime.


    • Modificato BlueLed domenica 19 gennaio 2020 12:24
    domenica 19 gennaio 2020 12:24
  • il problema è che Rhinoceros non genera il  code behind, solamente il file xaml con quel codice


    fabio miceli

    domenica 19 gennaio 2020 16:59
  • Se il code behind non ti serve, prova solo a caricare la pagina con XamlReader.
    domenica 19 gennaio 2020 17:25
  • Si può utilizzare un unico code behind (cioè una sola page.xaml.cs) e avere la possibilità di cambiare (a runtime) la pagina xaml ?

    poichè il Name del controllo GeometryModel3D cambia ogni qualvolta Rhino genera da un nuovo disegno la Page.xaml

    Nel Database  ho una lista di elementi  che coincide al Name del GeometryModel3D.

    Rhino, dal disegno Armadio genera nel xaml tutti i suoi elementi codificati, (codici e descrizioni che definisco io nei livelli)

    in un nuovo disegno Cucina genera tutti i gli elementi della cucina, diversi da Armadio:

    in code behind, nella lista del Database, ho Cucina ed armadio. L'utente finale deve scegliere cosa visualizzare, e di conseguenza quale page.xaml caricare


    fabio miceli



    lunedì 20 gennaio 2020 18:46
  • Devo avere la possibilità di cambiare le proprietà dell'eelemento GeometryModel3D:

                var PCU901L01 = (GeometryModel3D)this.FindName("PCU901L01");
                PCU901L01.Material = new DiffuseMaterial(Brushes.Transparent);


    fabio miceli

    lunedì 20 gennaio 2020 19:08
  • Ok ci sono quasi.....carico la page.xaml nella window:

    FileStream fs = new FileStream(@"D:\XAML\Render2.xaml", FileMode.Open);

                Window w = new Window();

                object xaml = XamlReader.Load(fs);
                w.Content = xaml;
                w.Show();

    Il codice xaml:

    <Page x:Class="TestLoadXAML.Render2"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
          xmlns:local="clr-namespace:TestLoadXAML"
          mc:Ignorable="d" 
          d:DesignHeight="300" d:DesignWidth="300"
    Loaded="onLoaded"
          Title="Render2">

        </Page>

    Se vado in esecuzione mi da questo errore:

    'Il nome 'TestLoadXAML.Render2' della classe non corrisponde al tipo dell'istanza radice attuale 'System.Windows.Controls.Page'. Rimuovere l'istruzione della classe o fornire un'istanza tramite XamlObjectWriterSettings.RootObjectInstance.' numero riga '1' e posizione riga '7'."

    se elimino Loaded funziona.

    non Trova io file cs ??


    fabio miceli

    lunedì 20 gennaio 2020 20:47
  • Il file cs hai detto che non ti serve ed il reader non te lo compilerebbe comunque quindi elimina sia l'evento Loaded che l'attributo x:Class
    lunedì 20 gennaio 2020 22:01
  • Ciao BlueLed,

    Innanzitutto ti ringrazio infinitamente per la tua attenzione e i tuoi consigli.

    Se elimino l'evento Loaded che l'attributo x:Class non ho nessun problema a visualizzare il render.

    il mio problema è che ho bisogno di modificare le proprietà di GeometryModel3D:

     var PCU901L01 = (GeometryModel3D)this.FindName("PCU901L01");
                PCU901L01.Material = new DiffuseMaterial(Brushes.Transparent);

    (e anche creare un file.bmp o jpg)

    il quel modo riesco a farlo solamente copiando tutto il codice xaml generato da Rhino nella Window generata da visual studio, che ovviamente ha sia pagina .xaml che pagina .cs

    Alla Window a cui carico il xaml ........

    FileStream fs = new FileStream(@"D:\XAML\Render1.xaml", FileMode.Open);

                    Window w = new Window();

                    object xaml = XamlReader.Load(fs);
                    w.Content = xaml;
                    w.Show();

    posso associare anche un evento loaded (o una pagina .cs) o un metodo dove metto il codice per modificare le proprietà di GeometryModel3D ?


    fabio miceli

    martedì 21 gennaio 2020 11:57
  • Pensavo di fare in questo modo:

                   newwindow.Loaded += new RoutedEventHandler(myLoaded);

            private void myLoaded(object sender, RoutedEventArgs e) {
                MessageBox.Show(Directory.GetCurrentDirectory());

                Window newwindow = sender as Window;
                var PCU901L01 = (GeometryModel3D)newwindow.FindName("PCU901L01");
                PCU901L01.Material = new DiffuseMaterial(Brushes.Transparent);
            }

    il MessageBox lo visualizza (ovviamente se) tolgo l'altro codice)

    ma solo ma con i codice di GeometryModel3D mi da questo errore;

    {"Riferimento a un oggetto non impostato su un'istanza di oggetto."}


    fabio miceli

    martedì 21 gennaio 2020 12:25
  • Nel tuo caso l'oggetto restituito dal load è un oggetto Page. Hai provato a modificarlo direttamente appena caricato?
    martedì 21 gennaio 2020 12:32