首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF窗口背景ImageBrush不平铺

WPF窗口背景ImageBrush不平铺
EN

Stack Overflow用户
提问于 2010-11-04 21:53:20
回答 2查看 16.9K关注 0票数 18

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

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

我遗漏了什么?

提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-04 22:11:19

您需要设置TileMode属性以及ViewportViewportUnits

例如:

代码语言:javascript
复制
<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属性中指定的图像大小,可以使用带有IValueConverterBinding从图像中计算图像大小。我相信一定有更好的方法来做这件事,但我还没有找到!

XAML:

代码语言:javascript
复制
<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>

值转换器:

代码语言:javascript
复制
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
}
票数 43
EN

Stack Overflow用户

发布于 2014-04-11 03:50:37

如果您希望在c#中使用整个解决方案

代码语言:javascript
复制
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;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4097330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档