2010-07-04 17 views
5

Je développe un contrôle d'image personnalisé dans WPF .NET 3.5 et Visual Studio 2010.WPF Comment centrer le Image.Source

En WinForms le contrôle PicutreBox a le SizeMode propriété qui comprend "CenterImage ".

Je souhaite que le contrôle Image ait cette capacité.

Y at-il de toute façon?

Merci

Mon code 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> 

Mon code 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; 
    } 
} 

Où "webcam_backgroud" est une image .png ajoutée par l'éditeur par défaut des ressources de Visual Studio.

Répondre

2

Définissez Stretch sur Aucun.

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

J'ai essayé, mais il n'a pas l'effet que je m'attendais. Maintenant, il réduit beaucoup mon image et la place dans le coin supérieur gauche. Aucun: http://img28.imageshack.us/img28/1783/imagestretchnone.png Uniforme: http://img810.imageshack.us/img810/2401/imagestretchuniform.png – JoanComasFdz

+0

@unexpectedkas: Pouvez-vous éditer votre question inclure une partie de votre XAML? L'image sera centrée dans le contrôle Image par défaut, mais le contrôle Image peut ne pas être centré ou étiré sur son parent. Par exemple, si votre fenêtre entière est une grille avec une image, elle sera centrée, mais si c'est une toile avec une image, elle sera dans le coin supérieur gauche. – Quartermeister

+0

Ok, je viens de le faire. J'ai réglé l'alignement H/V au centre et, oui, les centres de l'image. Merci beaucoup. Quoi qu'il en soit, le Stretch doit être "Uniforme". J'étais confus parce que le contrôle bougeait sur la fenêtre ¬¬ ' – JoanComasFdz

5

Vous devriez essayer de centrer l'ensemble de l'élément Image lui-même en utilisant les alignements:

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

Oui, je l'ai fait. mais pour une raison quelconque, le contrôle présenterait une sorte de «vignette», pas celle d'origine. Je pense que c'est à cause de la façon dont je suis en train d'héberger une ressource, c'est-à-dire que je n'utilise pas d'URI. – JoanComasFdz

-2

juste donner un x: nom de la fenêtre, et récupérer des informations sur ses dimensions.

<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> 

Et puis rappeler les informations sur la taille réelle des fenêtres de la code.Then, puisque vous avez la taille de l'hébergement et la taille de l'objet, il est juste en mathématiques. Déclarant une taille d'image all'around l'arrière-plan de 'FrameWidth', la dimension de l'image (destWidth, destHeight), vous définissez:

 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

Ceci est ma solution de travail:

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