Вам необходимо установить свойство TileMode
, а также Viewport
и 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
указывают желаемый размер каждого повторения. Если вы хотите отобразить все изображение, это должны быть ширина и высота изображения.
Пример вывода:
Редактировать в ответ на комментарии
Если вы не знаете размер изображения, который нужно указать в свойстве 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
}