我正在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图像。
答案 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);