WPF窗口背景ImageBrush不平铺

前端之家收集整理的这篇文章主要介绍了WPF窗口背景ImageBrush不平铺前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有背景图像的窗口。图像可能会在运行时发生变化,这对于此而言并不重要。

我想要将图像固定在左上角(它是),而不是缩放(这也是正确的,但是当窗口大于图像时,我需要图像重复(瓦片),我在做… 。


我失踪了什么

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
}
原文链接:https://www.f2er.com/windows/372493.html

猜你在找的Windows相关文章