2010-07-04 16 views
5

Sto sviluppando un controllo personalizzato Immagine in WPF .NET 3.5 e Visual Studio 2010.WPF Come centrare l'Image.Source

In WinForms controllo PicutreBox ha la proprietàSizeMode che comprende "CenterImage ".

Desidero che il controllo Immagine abbia quell'abilità.

c'è comunque?

Grazie

Il mio codice 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> 

mio codice 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; 
    } 
} 

Dove "webcam_backgroud" è un'immagine png inserito da editor di risorse di Visual Studio di default.

risposta

2

Impostare Stretch su Nessuno.

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

ho provato, ma non sta ottenendo l'effetto che mi aspetterei. Ormai riduce molto la mia immagine e la metto nell'angolo in alto a sinistra. Nessuno: http://img28.imageshack.us/img28/1783/imagestretchnone.png uniformi: http://img810.imageshack.us/img810/2401/imagestretchuniform.png – JoanComasFdz

+0

@unexpectedkas: Can you modificare la tua domanda includere alcuni dei tuoi XAML? Per impostazione predefinita, l'immagine verrà centrata nel controllo Immagine, ma il controllo Immagine potrebbe non essere centrato o allungato sul suo elemento principale. Ad esempio, se l'intera finestra è una griglia con una sola immagine, sarà centrata, ma se si tratta di una tela con una sola immagine, sarà nell'angolo in alto a sinistra. – Quartermeister

+0

Ok, l'ho appena fatto. Ho impostato H/V allineato al centro e, sì, al centro dell'immagine. Molte grazie. Ad ogni modo per sembrare giusto Stretch deve essere "Uniform". Sono stato confuso perché il controllo si è spostato sulla finestra ¬¬ ' – JoanComasFdz

5

Si dovrebbe cercare di centrare l'intera Image elemento di se stesso utilizzando gli allineamenti:

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

Sì, l'ho fatto. ma per qualche ragione il controllo presenterebbe una sorta di "miniatura", non quella originale. Penso che sia a causa del modo in cui sto depositando una risorsa, che non si usino gli URI. – JoanComasFdz

-2

basta dare una x: nome sulla finestra, e recuperare le informazioni sulle sue dimensioni.

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

E poi recuperare le informazioni sulla dimensione effettiva delle finestre della code.Then, in quanto si ha la dimensione di hosting e le dimensioni dell'oggetto, è solo la matematica. Affermare una dimensione del frame all'around sfondo della 'frameWidth', la dimensione dell'immagine (destWidth, destHeight), è possibile impostare:

 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

Questa è la mia soluzione di lavoro:

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