gpt4 book ai didi

WPF 窗口背景 ImageBrush 不平铺

转载 作者:行者123 更新时间:2023-12-01 23:43:55 26 4
gpt4 key购买 nike

我有一个带有背景图像的窗口。图像可能会在运行时发生变化,这对此并不重要。

我希望图像固定在左上角(确实如此)而不是缩放(这也是正确的)。但是当窗口大于图像时,我需要重复(平铺)图像。我是正在做...

我错过了什么?

TIA

最佳答案

您需要设置TileMode属性以及 ViewportViewportUnits:

例如:

<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 段表示每次重复所需的大小。如果要显示整个图像,这些应该是图像的宽度和高度。

输出示例: tiled magnifiers

编辑回复评论

如果您不知道要在 Viewport 属性中指定的图像大小,可以将 BindingIValueConverter 结合使用从图像中计算它。我相信一定有一种更好的方法来做到这一点,但我还没有找到!

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
}

关于WPF 窗口背景 ImageBrush 不平铺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4097330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com