2015-10-08 17 views
5

Chciałbym mieć obraz wewnątrz płótna i dopasować go do okna. Gdy płótno jest puste, działa dobrze (płótno jest zmieniane w oknie), jednak gdy dodaję do niego obraz, płótno nie pasuje do okna, nawet jeśli mam rozciągnięty obraz "jednolity". I ilustruję to zachowanie poniżej. Używanie płótna jest niestety wymagane, ponieważ rysuję nad nim kształty. Masz jakieś pomysły?Rozciągnij obraz na płótnie

Dobry

<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

Twój obraz jest większy niż obszar, wymiany płótnie dla ViewBox lub ponieważ wygląda to po prostu używane jako w tle, dlaczego nie po prostu użyć go jako Border.Background z ImageBrush? –

+0

Próbowałem zawijania obrazu z ViewBox, ale to nie pomaga i Border jest tylko dla ilustracji w tym pytaniu, nie używam go normalnie. Obraz niestety nie jest jedynie tłem. – user1121956

+0

Więc porzuciłeś płótno dla viewbox i ustaw viewbox [stretch] (https://msdn.microsoft.com/en-us/library/system.windows.media.stretch%28v=vs.110%29.aspx) na jednolitego lub jednolitego do wypełnienia? To powinno działać dobrze, zgadnij, że możemy potrzebować bardziej realnego przykładu tego, co próbujesz osiągnąć. –

Odpowiedz

7

Nie sądzę odcinek wor ks bardzo dobrze z płótnem. Zobacz tę odpowiedź: https://stackoverflow.com/a/6010270/93233

Jednak udało mi się zmusić go do pracy z następującymi zasadami:

<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

Działa jak urok. Wielkie dzięki :) – user1121956

+0

Wspaniale, wiele post stwierdza, że ​​nie jest to możliwe. Doskonały! – Hans