2017-09-09 2 views
1

Bild in einem Fenster anzeigen klingt eine einfache Aufgabe, aber ich habe ein Problem damit.
Ich möchte mein Bild (mit variabler Größe) in einem Fenster (oder Panel) mit der Größe 300 * 400 zeigen. Durch Klicken auf das Bild oder Maximieren des Fensters sieht der Benutzer das Bild in seiner Originalgröße.
Der folgende Code funktioniert, um das Bild in der Startansicht auf 300 * 400 Miniaturbilder zu strecken, aber wenn es maximiert wird, erstreckt es sich auch auf den Vollbildmodus.ExtJS: Bild im Fenster anzeigen

var myImage = Ext.create('Ext.Img', { 
    src: imgSrc, 
}); 
picWin = Ext.create('Ext.window.Window', { 
    title: "My Picture", 
    width: 300, 
    height: 400, 
    maximizable: true, 
    maxWidth: myImage.getWidth(), 
    maxHeight: myImage.getHeight(), 
    layout: "fit", 
    items: [myImage] 
}) 
picWin.show(); 

Antwort

0

Schließlich kam ich zu einer Lösung wie folgt. Zuerst müssen wir Kartenlayout verwenden. Dann definieren wir zwei Container für das angegebene Bild, eines für die erste Ansicht und eines für die maximierte Ansicht. Letztendlich müssen wir diese Karten ändern, wenn das Fenster maximiert ist und wenn es wiederhergestellt wird.
-Code lautet wie folgt:

// Two image for when maximizing and when in initial view 
var myImage = Ext.create('Ext.container.Container', { 
    layout: 'fit', 
    items: [{ 
     xtype: 'image', 
     src: imgSrc 
    }] 
}); 
var myImage2 = Ext.create('Ext.container.Container', { 
    scrollable: true, 
    items: [{ 
     xtype: 'image', 
     src: imgSrc 
    }] 
}); 
picWin = Ext.create('Ext.window.Window', { 
    title: "my title", 
    width: 300, 
    height: 400, 
    maximizable: true, 
    layout: "card", 
    activeItem: 0, 
    items: [myImage,myImage2], 
    listeners: { 
     maximize: function(){ 
      this.setActiveItem(1); 
     }, 
     restore: function(){ 
      this.setActiveItem(0); 
     }, 
    } 
}) 
picWin.show(); 
0

einen Blick auf mein Beispiel nehmen: https://fiddle.sencha.com/#view/editor&fiddle/26eo

scheint zu funktionieren. Ich entfernte die maximale Breite und Höhe des Satzes.

+1

Danke. Das Problem mit Ihrer Lösung besteht darin, dass bei Maximierung auch Bilder gedehnt werden. Wenn maximiert ist, möchte der Benutzer das Bild in seiner Originalgröße sehen. – ALalavi

0

Was passiert, wenn wir das Layout von 'fit' zu 'hbox' statt verändert? Dies scheint Ihnen zu geben, was Sie wollen - wenn das Fenster maximiert ist, dehnt sich das Bild nicht. Center und vbox schienen ebenfalls zu funktionieren, also gibt es wahrscheinlich ein paar Layouts, die Sie verwenden könnten, um es zu funktionieren. Aber da Sie nur ein Bild im Fenster haben, spielt es wahrscheinlich keine Rolle.

picWin = Ext.create('Ext.window.Window', { 
     title: "My Picture", 
     width: 300, 
     height: 400, 
     maximizable: true, 
     layout: "hbox", 
     items: [myImage] 
    }) 
    picWin.show(); 
} 
+0

Danke Mann. Das Problem mit Ihrer Lösung besteht darin, dass das Bild in der ersten Ansicht nicht gestreckt wird. Benutzer in der ersten Ansicht möchte eine Miniaturansicht des Bildes sehen. Dies bedeutet, dass das Bild auf die Fenstergröße ausgedehnt werden muss (denken Sie an Bilder, die größer sind als die Fenstergröße). Es klingt, dass es kein Problem gibt, zwei Bilder mit unterschiedlichen Layouts für die erste Ansicht und die maximierte Ansicht zu definieren. Das liegt hauptsächlich daran, dass ExtJS das Layout nicht ändern kann, nachdem ein Element erstellt wurde. – ALalavi

+0

Ah okay, sieht so aus, als hätte ich deine Frage nicht ganz verstanden. – DeputyDildog