2009-12-03 3 views
11

Ich habe ein 27 x 27 Pixelbild, das ich in WPF bin Anzeige, aber es zeigt größer als die Größe des Fensters.Wie kann ich Bilder in XAML als ihre tatsächliche Größe anzeigen lassen?

Wie bekomme ich es, um seine tatsächliche Größe anzuzeigen?

alt text http://www.deviantsart.com/upload/m20dk6.png

XAML:

<Window x:Class="TestImage23434.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel x:Name="MainStackPanel"/> 
</Window> 

-Code Behind:

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media.Imaging; 
using System; 

namespace TestImage23434 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      TextBlock tb = new TextBlock(); 
      tb.Text = "above image "; 
      MainStackPanel.Children.Add(tb); 

      Image img = new Image(); 
      img.Source = new BitmapImage(new Uri(@"C:\test\circle.png")); 
      img.HorizontalAlignment = HorizontalAlignment.Left; 
      img.VerticalAlignment = VerticalAlignment.Top; 
      MainStackPanel.HorizontalAlignment = HorizontalAlignment.Left; 
      MainStackPanel.VerticalAlignment = VerticalAlignment.Top; 
      MainStackPanel.Children.Add(img); 

      TextBlock tb2 = new TextBlock(); 
      tb2.Text = "below image"; 
      MainStackPanel.Children.Add(tb2); 
     } 
    } 
} 

Antwort

19

img.Stretch = Stretch.None

hat standardmäßig die Stretch property einen Wert von Uniform, die das Bild passt die Größe alle verfügbaren Raum zu füllen.

+2

Ich glaube nicht, dass ich jemals ein Bild auf diese Weise benutzt habe. .. Ich habe vergessen es existierte sogar. –

+1

Wenn wir "img.Stretch = Stretch.None" einstellen, gibt es ein Problem, wenn das Bild zu groß ist, wird ein Teil des Bildes nicht sichtbar. Eine Lösung hierfür – achukrishnan

2
img.HorizontalAlignment = HorizontalAlignment.Left; 
img.VerticalAlignment = VerticalAlignment.Top; 
img.Stretch = Stretch.None; 

Die Stackpanel wird füllen strecken/overfl egal welcher Container es ist, es sei denn, seine Größe ist angegeben. Da Sie keine Ränder oder Ausrichtungen für irgendwas festlegen, ist das Standardverhalten für alles Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" oder einfach "Stretch to fill". Das Ausrichten/Positionieren Ihrer Elemente wird dieses Problem beheben.

EDIT: Hinzugefügt img.Stretch = Stretch.None;, auch ich baute eine Beispiel-App und testete es ... es funktioniert.

+0

Wie wirkt sich die Ausrichtung auf die Größe des angezeigten Bildes aus? – dtb

+0

Die Standardausrichtung ist 'Stretch', was * die Größe beeinflusst. – Heinzi

+0

Editierte Antwort zu erklären. –

4

Keiner dieser Tipps funktionierte für mich. Einige verbindliche Tricks haben mich dazu gebracht.

<Image Source="yourPic.png" Stretch="UniformToFill" 
Width="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelWidth}" 
Height="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelHeight}" /> 

Sie könnten wahrscheinlich Strech auf None setzen, aber das funktionierte für meine App mit .net 4.5.1.

+0

Das Binden der Breite und Höhe funktioniert gut in Kombination mit einer statischen 'MaxWidth 'und' MaxHeight' und 'Stretch =" Uniform "', um die ursprüngliche Größe bis zu einem bestimmten Limit zu haben. Die akzeptierte Antwort zeigt nur einen Teil des Bildes in einem solchen Szenario. – grek40

Verwandte Themen