WPF如何使Image.Source居中

时间:2010-07-04 15:28:47

标签: c# wpf image alignment center

我正在WPF .NET 3.5和Visual Studio 2010中开发自定义图像控件。

在WinForms中, PicutreBox 控件具有 SizeMode 属性,其中包含“ CenterImage ”。

我希望我的Image控件具备这种能力。

还有吗?

由于

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

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

“webcam_backgroud”是默认视觉工作室资源编辑器添加的png图像。

4 个答案:

答案 0 :(得分:5)

您应该尝试使用对齐方式使整个Image元素居中:

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

答案 1 :(得分:3)

Stretch设置为无。

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

答案 2 :(得分:0)

这是我的工作解决方案:

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

答案 3 :(得分:-2)

只需在窗口上输入一个x:名称,然后检索其尺寸信息。

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

然后从代码中回忆关于窗口实际大小的信息。然后,由于你有托管大小和对象大小,它只是数学。在'frameWidth'的背景下描述帧大小,图像的尺寸(destWidth,destHeight),你设置:

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