2

Ich versuche ein skaliertes Bild in einem ScrollViewer in meiner Windows Phone 7 Anwendung zu haben. Auf der Anwendungsseite definiere ich die Steuerelemente wie folgt aus:Teile des Bildes fehlen bei der Verwendung von ScaleTransform mit LayoutTransformer und Scrollviewer unter Windows Phone 7

 <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Name="ImageScroller" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <layout:LayoutTransformer x:Name="LayoutTransformer"> 
       <layout:LayoutTransformer.LayoutTransform> 
        <ScaleTransform x:Name="ImageScale"/> 
       </layout:LayoutTransformer.LayoutTransform>      
       <Image x:Name="Image" Margin="4" Source="{Binding ImageSource}" /> 
      </layout:LayoutTransformer> 
     </ScrollViewer> 

Die LayoutTransformer Klasse aus dem Silverlight-Erweiterung Projekt kommt.

Ich habe Methoden, um die ZoomIn und ZoomOut Ereignisse zu behandeln und ich folgendes da:

private void ApplicationBarIconButton_Click_1(object sender, EventArgs e) 
    { 
     // Zoom In 
     ImageScale.ScaleX = ImageScale.ScaleY = ImageScale.ScaleX + 0.5; 
     LayoutTransformer.ApplyLayoutTransform(); 
     ImageScroller.InvalidateMeasure(); 
    } 

jedoch, wenn ich einen ZoomIn haben und das Bild geändert wird die Scrollsteuerung leeren Bereich am Boden hat und auf der rechten Seite des Bildes. Fast so, als ob das Bild skaliert wurde, aber abgeschnitten wurde, indem die Größe des Originalbildes vor der Maßstabsumwandlung verwendet wurde.

Irgendwelche Ideen, was ich falsch mache?

Ich habe auch ein Projekt, das dieses Problem reproduziert: http://dl.dropbox.com/u/2598447/ZoomTest.WP7.zip

+0

Was ist das „Silverlight Extension“ Projekt? – AnthonyWJones

+0

Silverlight Extension ist ein Open-Source-Projekt, das auf Codeplex gehostet wird. Hier ist die URL des Projekts: http://www.slextensions.net/ – gyurisc

+0

Versuchen Sie stattdessen 'LayoutTransformer' von' Silverlight Toolkit' (http://silverlight.codeplex.com/). – decyclone

Antwort

1

erhielt ich endlich etwas Antwort und hoffentlich eine Lösung von David Anson von Microsoft. Hier sein Kommentar, aber man kann auch seine Antwort auf seinem Blog lesen:

Your phone can turn into a robot - LayoutTransformer works great on the Windows Phone platform

Vielen Dank für die große Demonstration! Dieses Problem entpuppt sich als Einschränkung von Silverlight unter Windows Telefon 7 - dass UI-Elemente größer als 2048x2048 bei der Anzeige auf diese Größe abgeschnitten werden. Hier ist ein Link zu einige weitere Informationen über das Problem:

stackoverflow.com/.../bitmapimage-size-restrictions-in-silverlight

In Ihrem Beispiel das Testbild ist 1201x1401 und ich Erste Mitteilung Clipping nach 3 "Zoom In" s - was zu einem Zoomfaktor von 1,9x entspricht - was übersetzt zu einer effektiven Bildgröße von 2282x2662 - die die Grenzen in beiden Richtungen überschreitet. Doing the math, um die Menge zu berechnen, die diese 2048 überschreitet ergibt 234 in der horizontalen Richtung und 614 in der vertikal. Jetzt behalten Sie diese Zahlen in Verstand und scrollen Sie den ganzen Weg zum unten rechts von der ScrollViewer auf Bildschirm Ihres Telefons 480x800. Beachten Sie, dass die Menge der horizontalen schwarzen Raum ist etwa die Hälfte Bildschirmbreite (dh ~ 240px) und der vertikalen schwarzen Raum ist etwa drei Viertel der Bildschirmhöhe (dh 600px) - weil diese Schätzungen übereinstimmen so eng mit den Überschüssen, die wir gerade berechnet haben, Ich bin ziemlich zuversichtlich, dass Sie in dieses Problem laufen.

Leider ist es eine Plattform Begrenzung (die Sie bereits bestätigt durch Ihr Szenario erfolgreich auf dem Desktop Silverlight läuft) und deshalb nicht etwas, kann es direkt in LayoutTransformern beheben. Glücklicherweise gibt es einige Problemumgehungen, die im obigen Thread/Link diskutiert werden.

Entschuldigung für den Ärger - ich hoffe, das hilft!

Auch gibt es einen Stackoverflow Artikel in der Antwort verwiesen, die Ursache für dieses Problem als Einschränkung Phone 7 Windows-Plattform zu beschreiben:

BitmapImage size restrictions in Silverlight