2009-12-03 7 views
11

que tienen una imagen 27 x 27 píxeles que estoy mostrando en WPF pero muestra mayor que el tamaño de la ventana.¿Cómo puedo obtener imágenes en XAML para que se muestren como su tamaño real?

¿Cómo puedo ver que muestre su tamaño real?

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> 

código subyacente:

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); 
     } 
    } 
} 

Respuesta

19

img.Stretch = Stretch.None

Por defecto, el Stretch property tiene un valor de Uniform, que cambia el tamaño de la imagen para llenar todo el espacio disponible.

+2

No creo que alguna vez haya usado una imagen de tal manera que tuve que usar la propiedad Stretch. .. Olvidé que incluso existió. –

+1

si establecemos "img.Stretch = Stretch.None" hay un problema cuando la imagen es demasiado grande, alguna parte de la imagen no se hace visible. Cualquier solución para este – achukrishnan

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

El StackPanel se amplía para llenar/OVERFL cualquier contenedor en el que esté, a menos que se especifique su tamaño. Como no está configurando márgenes o alineamientos en nada, el comportamiento predeterminado para todo es Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch", o simplemente ponga "Estirar para llenar". Alinear/posicionar sus elementos solucionará este problema.

EDITAR: Agregó img.Stretch = Stretch.None;, también construí una aplicación de muestra y la probé ... funciona.

+0

¿Cómo afecta la alineación al tamaño de la imagen mostrada? – dtb

+0

La alineación estándar es 'Stretch', que * does * afecta el tamaño. – Heinzi

+0

Respuesta editada para explicar. –

4

Ninguno de estos consejos funcionaba para mí. Algunos trucos vinculantes es lo que me impulsó.

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

Probablemente se podría establecer en Ninguno Strech pero esta trabajado para mi aplicación utilizando .NET 4.5.1.

+0

El ancho y la altura de unión funcionan bien en combinación con un 'MaxWidth estático 'y' MaxHeight' y 'Stretch =" Uniform "' para tener un tamaño original hasta cierto límite. La respuesta aceptada muestra solo una parte de la imagen en dicho escenario. – grek40

Cuestiones relacionadas