2010-07-04 40 views
5

Tôi đang phát triển một điều khiển tùy chỉnh hình ảnh trong WPF .NET 3.5 và Visual Studio 2010.WPF Làm thế nào để tập trung các Image.Source

Trong WinForms các PicutreBox kiểm soát có SizeMode tài sản trong đó bao gồm "CenterImage ".

Tôi muốn điều khiển Hình ảnh của mình có khả năng đó.

Có cách nào không?

Cảm ơn

mã XAML của tôi:

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

đang CustomControl của tôi:

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

đâu "webcam_backgroud" là một hình ảnh png thêm bởi biên tập tài nguyên visual studio mặc định.

Trả lời

2

Đặt Stretch thành Không.

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

Tôi đã cố gắng, nhưng nó không nhận được hiệu quả tôi mong đợi. Bởi bây giờ nó làm giảm hình ảnh của tôi rất nhiều và đặt nó ở góc trên bên trái. Không có: http://img28.imageshack.us/img28/1783/imagestretchnone.png Đồng phục: http://img810.imageshack.us/img810/2401/imagestretchuniform.png – JoanComasFdz

+0

@unexpectedkas: Bạn có thể chỉnh sửa câu hỏi của mình không để bao gồm một số XAML của bạn? Hình ảnh sẽ được vẽ ở giữa trong điều khiển Hình ảnh theo mặc định, nhưng điều khiển Hình ảnh có thể không được căn giữa hoặc kéo dài trên bố cục của nó. Ví dụ, nếu toàn bộ cửa sổ của bạn là một Grid với một Image thì nó sẽ được căn giữa, nhưng nếu nó là Canvas với một Image thì nó sẽ nằm ở góc trên bên trái. – Quartermeister

+0

Ok, tôi vừa mới làm. Tôi đã đặt H/V căn chỉnh về giữa và, có, hình ảnh trung tâm. Cảm ơn rất nhiều. Dù sao để nhìn nó đúng Stretch phải được "thống nhất". Tôi đã nhầm lẫn vì điều khiển được di chuyển trên cửa sổ ¬¬ ' – JoanComasFdz

5

Bạn nên cố gắng và tập trung toàn bộ Image yếu tố bản thân bằng cách sử dụng sắp xếp:

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

Vâng, tôi đã làm. nhưng vì lý do nào đó, kiểm soát sẽ trình bày một loại "hình thu nhỏ", chứ không phải bản gốc. Tôi nghĩ rằng đó là vì cách tôi đang loding một nguồn tài nguyên, đó là không sử dụng URI. – JoanComasFdz

-2

Chỉ cần đưa ra một x: tên trên cửa sổ, và lấy thông tin về kích thước của nó.

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

Và sau đó nhớ lại thông tin về kích thước thực tế của cửa sổ từ mã. Sau đó, vì bạn có kích thước lưu trữ và kích thước đối tượng, nó chỉ là toán học. Nêu một kích thước khung hình all'around nền của 'frameWidth', kích thước của hình ảnh (destWidth, destHeight), bạn thiết lập:

 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

Đây là giải pháp làm việc của tôi:

<Image Name="PreviewImage" HorizontalAlignment="Stretch" Stretch="Uniform" VerticalAlignment="Top" Width="456" Height="256"/> 
Các vấn đề liên quan