2010-06-16 17 views
80

Tengo un problema con la visualización de imágenes en WPF.WPF: ¿Cómo mostrar una imagen en su tamaño original?

Aquí está mi código:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5"> 
     <Button.Content> 
      <StackPanel Orientation="Horizontal" Margin="10,0"> 
       <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" /> 
       <TextBlock Text="添加" /> 
      </StackPanel> 
     </Button.Content> 
    </Button> 

tengo una imagen con tamaño original de 32 * 32, pero cuando me encontré con el código anterior, la imagen se amplía para llenar todo el espacio, más allá de su tamaño original. También configuré la propiedad "Estirar" en "Ninguno", pero parece que no funciona.

Entonces, ¿cómo puedo solucionar este problema? ¡Gracias!

Respuesta

110

Here es una pregunta similar. Generalmente, configurar Stretch="None" es suficiente.

También es muy importante lo que DPI tiene la imagen establecida en los metadatos. Me tomó bastante tiempo darme cuenta de que si el DPI de la imagen es diferente del DPI del monitor (generalmente 96), WPF will automatically resize the image, as it tries to be DPI-independent.

+8

Gran consejo con respecto a la configuración de DPI, Paja. Varios de mis iconos de la barra de herramientas se habían establecido en 72 ppp, lo que hace que aparezcan más grandes, incluso si las dimensiones de los píxeles son 16x16. – dthrasher

+0

No entiendo. ¿Estás diciendo que WPF distribuirá tu ventana de forma diferente dependiendo de la resolución de la pantalla? No hay forma de que eso sea algo bueno. –

+0

@KyleDelaney ¿Has leído el artículo que he vinculado en la respuesta? – Paya

5

no intente especificar la anchura o la altura, utilizar de esta manera en su lugar:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
+0

i hava probado esto antes, pero no funciona – jiluo

5
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" /> 

Esta funciona para mí, para una imagen con 600x800 pixels y 96dpi.

@ rishad2m8 Si el tamaño es desconocido, uno puede detectar el tamaño primero con https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx Supongo.

+1

¿Qué ocurre si el tamaño de la imagen es desconocido? – rishad2m8

+0

Eres un salvador. No querrás saber cuánto tiempo estuve agonizando por este problema. –

+0

UseLayoutRounding establecido en true funcionó para mí! ¡Gracias! –

3

Agregando a la respuesta de Paya: intento de compensar WPF 's para adaptarse a la resolución de los monitores debe ser capaz de establecer la Width y Height a las dimensiones originales del archivo y utilizar Stretch="Fill". Esto funcionó para mí.

Cuestiones relacionadas