调整大小时不要缩放ImageBrush,重复它!

时间:2010-12-21 17:54:04

标签: c# wpf resize scale imagebrush

我遇到ImageBrush

的问题
<Window ... >
    <Grid>
        <Grid.Background>
            <ImageBrush ImageSource="Controls\Images\notebook_paper_Line.jpg" TileMode="FlipX"
                        Viewport="0,0,1,0.09" />
        </Grid.Background>        
    </Grid>
</Window>

我想在用户调整窗口大小时重复图像。但是当用户调整窗口大小时,当前图像会变焦。 (请注意,图片尺寸很小,我使用TileModeViewport来重复它,并在调整大小时出现问题!)。

任何XAML代码都会很棒! :)

我很抱歉英语不好!!!

1 个答案:

答案 0 :(得分:13)

默认情况下,TileBrush的视口是0,0,1,1而ViewportUnits是RelativeToBoundingBox,这意味着0,0,1,1映射到整个目标大小(在这种情况下,网格的边界) )。

因此,如果要平铺ImageBrush,则需要调整视口。如果您要将视口设置为0,0,.5,.5,您应该看到平铺2 x 2的图像(因为每个图块将是网格大小的50%x50%),或者0,0,0.25, 0.1会产生4x10的平铺等......

但是,这仍然无法阻止图像重新缩放。因此,在您的情况下,您可能想要的是将视口设置为图像的大小,并将ViewportUnits设置为Absolute而不是RelativeToBoundingBox。

在下面的xaml中,我有一个24x24像素的图像,所以我相应地设置了我的视口。这会针对网格的完整大小重复平铺图像。如果调整网格大小,将显示更多图块。

<ImageBrush ImageSource="Images\book_green.png" TileMode="FlipX" 
            Viewport="0,0,24,24" ViewportUnits="Absolute" />

我希望有所帮助。