2015-10-08 8 views
5

Ich möchte Bild innerhalb Canvas haben und es an das Fenster anpassen. Wenn die Leinwand leer ist, funktioniert sie gut (die Größe der Leinwand wird innerhalb des Fensters geändert), aber wenn ich Bild hinzufüge, passt die Leinwand nicht mehr zu Fenster, obwohl ich Stretch = "Uniform" auf das Bild angewendet habe. Ich illustriere dieses Verhalten unten. Die Verwendung der Leinwand ist leider eine Voraussetzung, da ich Formen darüber zeichne. Irgendwelche Ideen bitte?Stretch Image in Canvas

Gut

<Window x:Class="ImageCropper.Window3" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window3" Height="300" Width="300"> 
    <Border BorderThickness="3" BorderBrush="Red"> 
     <Canvas Background="Blue"> 
     </Canvas> 
    </Border> 
</Window> 

enter image description here

Bad

<Window x:Class="ImageCropper.Window3" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window3" Height="300" Width="300"> 
    <Border BorderThickness="3" BorderBrush="Red"> 
     <Canvas Background="Blue"> 
      <Image Source="asd.png" Stretch="Uniform" /> 
     </Canvas> 
    </Border> 
</Window> 

enter image description here

+0

Ihr Bild ist größer als die Fläche, Swap-Leinwand für ViewBox oder da es sieht aus wie es gerade verwendet wird, ist als ein Hintergrund, warum nicht einfach als Border.Background mit einem ImageBrush verwenden? –

+0

Ich habe versucht, Bild mit ViewBox zu verpacken, aber es hilft nicht und Border ist nur zur Veranschaulichung in dieser Frage, ich verwende es normalerweise nicht. Bild ist leider nicht nur Hintergrund. – user1121956

+0

Sie haben also die Leinwand für Viewbox verlassen und Viewbox [stretch] (https://msdn.microsoft.com/en-us/library/system.windows.media.stretch%28v=vs.110%29.aspx) auf gesetzt Uniform oder Uniform zu füllen? Das sollte gut funktionieren, denke mal, wir brauchen vielleicht ein realeres Beispiel dafür, was du erreichen willst. –

Antwort

7

Ich glaube nicht, strecken wor ks mit Leinwand sehr gut. Sehen Sie diese Antwort: https://stackoverflow.com/a/6010270/93233

aber ich war in der Lage, es zu erhalten mit der folgenden arbeiten:

<Border BorderThickness="3" BorderBrush="Red"> 
    <Canvas Background="Blue" Name="canvas1"> 
     <Image Source="asd.png" Width="{Binding Path=ActualWidth, ElementName=canvas1}" Height="{Binding Path=ActualHeight, ElementName=canvas1}" Stretch="Uniform"/> 
    </Canvas> 
</Border> 
+0

Funktioniert wie ein Charme. Vielen Dank :) – user1121956

+0

Großartig, viele Post Staaten, dass dies nicht möglich ist. Ausgezeichnet! – Hans