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

6

我遇到了一个与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个回答

14
默认情况下,TileBrush 的视口(Viewport)为 0,0,1,1,而且 ViewportUnits 是 RelativeToBoundingBox,这意味着 0,0,1,1 映射到整个目标大小(在本例中是 Grid 的边界)。

因此,如果要平铺 ImageBrush,则需要调整 Viewport。如果将 Viewport 设为 0,0,.5,.5,则应该会看到图像被平铺成2 x 2(因为每个平铺的大小为 Grid 的50% x 50%),或者设置为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" />

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接