[WPF] Auf ModelUIElement im Viewport3D zugreifen



  • Hallo liebe Forum-Gemeinde,

    ich habe mit WPF einen 3d-Würfel erstellt der als Seitenwand ein Bild hat.

    <ModelUIElement3D MouseDown="UIElement3D_MouseDown">
      <GeometryModel3D Geometry="{StaticResource wuerfelMesh}">
        <GeometryModel3D.Material>
          <DiffuseMaterial>
            <DiffuseMaterial.Brush>
              <ImageBrush ImageSource = "person_icon.png"/>
            </DiffuseMaterial.Brush>
          </DiffuseMaterial>
        </GeometryModel3D.Material>
      </GeometryModel3D>
    

    Über das MouseDown wird nun das Bild geändert.

    private void UIElement3D_MouseDown(object sender, MouseButtonEventArgs e)
            {
    
                ModelUIElement3D element = sender as ModelUIElement3D;
                GeometryModel3D geo = element.Model as GeometryModel3D;
                DiffuseMaterial mat = (geo.Material as DiffuseMaterial);
                ImageBrush imgBrush = (mat.Brush as ImageBrush);
    
                Image myImage = new Image();
                BitmapImage bitImage = new BitmapImage();
                bitImage.BeginInit();
    
                if (this.textBox1.Text == "gesetz")
                {
                    bitImage.UriSource = new Uri("../../gesetz.jpg", UriKind.Relative);
                }
                else if (this.textBox1.Text == "person")
                {
                    bitImage.UriSource = new Uri("../../person_icon.png", UriKind.Relative);
                }           
    
                bitImage.EndInit();
                imgBrush.ImageSource = bitImage;        
    
            }
    

    Jetzt zu meiner Frage. Wie kann ich das Bild z.B. über einen Button ändern?
    Was ist der Sender, bzw. wie kann ich ihn "extern" ansprechen?

    ModelUIElement3D element = sender as ModelUIElement3D;

    Viele Grüße
    Darlo



  • über x:Name einen Namen zuweisen:

    <ModelUIElement3D x:Name="cube1" MouseDown="UIElement3D_MouseDown">

    Dann im c#-Teil drauf zugreifen...

    object ui3 = Viewport3D1.FindName("cube1") as object;

    Gruß
    Darlo


Anmelden zum Antworten