您需要设置TileMode http://msdn.microsoft.com/en-us/library/system.windows.media.tilebrush.tilemode.aspx财产以及Viewport
and ViewportUnits
:
例如:
<Window.Background>
<ImageBrush ImageSource="myImage.png"
Viewport="0,0,300,300"
ViewportUnits="Absolute"
TileMode="Tile"
Stretch="None"
AlignmentX="Left"
AlignmentY="Top" />
</Window.Background>
注意:第二个2段Viewport
属性指示每次重复的所需大小。如果要显示整个图像,这些应该是图像的宽度和高度。
Example output:
编辑回应评论
如果您不知道要在中指定的图像的大小Viewport
属性,您可以使用Binding
与IValueConverter
从图像中计算它。我相信一定有一种更好的方法可以做到这一点,但我还没有找到!
XAML:
<Window.Resources>
<local:Converter x:Key="Converter" />
</Window.Resources>
<Window.Background>
<ImageBrush ImageSource="myImage.png"
ViewportUnits="Absolute"
TileMode="Tile"
Stretch="None"
AlignmentX="Left"
AlignmentY="Top"
Viewport="{Binding ImageSource, RelativeSource={RelativeSource Self}, Converter={StaticResource Converter}}"/>
</Window.Background>
值转换器:
public class Converter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var source = (ImageSource)value;
return new Rect(0,0,source.Width, source.Height);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}