2010-07-04 31 views
5

Estoy desarrollando un control de imagen personalizado en WPF .NET 3.5 y Visual Studio 2010.WPF Cómo centrar el Image.Source

En WinForms el control dePicutreBox tiene la propiedadSizeMode que incluye "CenterImage ".

Quiero que mi control de imagen tenga esa capacidad.

¿Hay alguna manera?

Gracias

Mi código XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="768" Width="1024" xmlns:my="http://schemas.sharpsoft.net/xaml" xmlns:my1="clr-namespace:WpfApplication1"> 
    <Grid> 
     <my1:CustomControl1 
        x:Name="customControl11" 
        Width="206" 
        Height="197" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Top" 
        Margin="18,58,0,0" 
        Stretch="Uniform"/> 
    </Grid> 
</Window> 

mi código CustomControl:

public class CustomControl1 : Image 
{ 
    public CustomControl1() 
    { 
     // Bitmap to Stream 
     Stream ms = new MemoryStream(); 
     Properties.Resources.webcam_background.Save(ms, ImageFormat.Png); 

     // Stream to BitmapImage 
     BitmapImage bitmap = new BitmapImage(); 
     bitmap.BeginInit(); 
     bitmap.StreamSource = ms; 
     bitmap.EndInit(); 

     // Set it 
     Source = bitmap; 
    } 
} 

Donde "webcam_backgroud" es una imagen PNG añadido por el editor de recursos de Visual Studio por defecto.

Respuesta

2

Conjunto Stretch a Ninguno.

<Image Source="..." Stretch="None" /> 
+0

tengo probado, pero no está obteniendo el efecto que esperaría. Por ahora, reduce mucho mi imagen y la coloca en la esquina superior izquierda. Ninguno: http://img28.imageshack.us/img28/1783/imagestretchnone.png Uniforme: http://img810.imageshack.us/img810/2401/imagestretchuniform.png – JoanComasFdz

+0

@unexpectedkas: ¿Se puede editar su pregunta para incluir algunos de tus XAML? La imagen se dibujará centrada en el control de Imagen de forma predeterminada, pero el control de Imagen puede no estar centrado o estirado en su elemento principal. Por ejemplo, si toda su ventana es una Cuadrícula con una Imagen, entonces estará centrada, pero si se trata de un Lienzo con una Imagen, entonces estará en la esquina superior izquierda. – Quartermeister

+0

Ok, acabo de hacerlo. Configuré H/V al centro y, sí, la imagen se centra. Muchas gracias. De todos modos, para verlo bien, Stretch debe ser "Uniform". Estaba confundido porque el control se movió en la ventana ¬¬ ' – JoanComasFdz

5

Usted debe tratar de centrar todo el elemento Image sí mismo usando las alineaciones:

<Grid> 
     <Image Stretch="None" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" /> 
    </Grid> 
+0

Sí, lo hice. pero por alguna razón el control presentaría una especie de "miniatura", no la original. Estoy pensando que es por la forma en que estoy cargando un recurso, es decir, no estoy usando URI. – JoanComasFdz

-2

acaba de dar una x: nombre en la ventana, y recuperar información acerca de sus dimensiones.

<Window x:Name="mainWindowContainer" 
    x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="768" Width="1024" xmlns:my="http://schemas.sharpsoft.net 
    [...] 
</Window> 

Y luego recordar la información sobre el tamaño real de las ventanas de la code.Then, ya que tiene el tamaño de hosting y el tamaño del objeto, es sólo matemáticas. Indicando un tamaño de marco all'around el fondo de 'frameWidth', la dimensión de la imagen (destWidth, destHeight), que establece:

 int wOffset = (((int)mainWindowContainer.ActualWidth - frameWidth * 2) - destWidth)/2 + frameWidth; 
     int hOffset = (((int)mainWindowContainer.ActualHeight - frameWidth * 2) - destHeight)/2 + frameWidth; 

     Canvas.SetLeft(image, wOffset); 
     Canvas.SetTop(image, hOffset); 
0

Ésta es mi solución de trabajo:

<Image Name="PreviewImage" HorizontalAlignment="Stretch" Stretch="Uniform" VerticalAlignment="Top" Width="456" Height="256"/> 
Cuestiones relacionadas