我有一个带有背景图像的窗口。图像可能会在运行时发生变化,这对于此而言并不重要。
我想要将图像固定在左上角(它是),而不是缩放(这也是正确的,但是当窗口大于图像时,我需要图像重复(瓦片),我在做… 。
我失踪了什么
TIA
您需要设置
TileMode
属性以及Viewport和ViewportUnits:
例如:
<Window.Background> <ImageBrush ImageSource="myImage.png" Viewport="0,300,300" ViewportUnits="Absolute" TileMode="Tile" Stretch="None" AlignmentX="Left" AlignmentY="Top" /> </Window.Background>
注意:Viewport属性的第二个2段表示每个重复的所需大小。如果要显示整个图像,这些应该是图像的宽度和高度。
示例输出:
编辑响应评论
如果您不知道要在“视口”属性中指定的图像的大小,则可以使用带有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,source.Width,source.Height); } public object ConvertBack(object value,System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。