Ответ 1
Вам нужно установить свойство 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>
Примечание: два вторых сегмента атрибута 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
}