我有一个窗口与背景图像。图像可能会在运行时发生变化,这对于此确实不重要。我想让图像固定在左上方(它是),而不是缩放(这也是正确的,但是当窗口大于图像时,我需要图像重复(平铺)。我做...WPF窗口背景ImageBrush不平铺
我失去了什么?
TIA
我有一个窗口与背景图像。图像可能会在运行时发生变化,这对于此确实不重要。我想让图像固定在左上方(它是),而不是缩放(这也是正确的,但是当窗口大于图像时,我需要图像重复(平铺)。我做...WPF窗口背景ImageBrush不平铺
我失去了什么?
TIA
您需要设置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
属性的第二2段表示每个重复的所需尺寸。如果你想显示整个图像,这些应该是图像的宽度和高度。
输出示例:响应意见
编辑
如果你不知道在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
}
如果你想在C#中的整个解决方案
ImageBrush brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri(@"c:\your\image\source.gif"));
brush.TileMode = TileMode.Tile;
brush.ViewportUnits = BrushMappingMode.Absolute;
brush.Viewport = new Rect(0, 0, brush.ImageSource.Width, brush.ImageSource.Height);
MainWindow1.Background = brush;
我知道这个问题很老。只需发布一个可能的后端解决方案。 – Milne 2014-04-10 19:52:11
我 - <图像刷弹力=“None”AlignmentX =“Left”AlignmentY =“Top”ImageSource =“/ Panel; component/Images/woodpine.jpg”TileMode =“Tile”/> 但它不起作用 –
Jeff
2010-11-04 14:30:49
@Jeff - 我以前没有见过这个,但你需要设置Viewport和ViewportUnits - 我已经更新了答案以反映这个 – 2010-11-04 14:45:29
(+1)比我的,仍然使用ImageBrush。 – 2010-11-04 14:51:29