调整XAML Grid.Background图像的大小

时间:2013-12-23 18:35:22

标签: wpf xaml windows-runtime windows-8.1

我有一个简单的XAML片段,它放置了一组瓷砖,每个瓷砖都带有背景图像图标。

                <Grid.Background>
                    <ImageBrush Stretch="None" 
                                ImageSource="{Binding ImageSource}" 
                                AlignmentY="Center" 
                                AlignmentX="Center"/>
                </Grid.Background>

这种方法很好,除了背景图像完美填充方块。我确信XAML认为这很好,但实际上它需要大约一半的尺寸来匹配规格。

我尝试了几种方法,包括在网格上添加边框(截断背景图像,保持尺寸,但在侧面和顶部将其切掉),并在不同位置添加边距和填充。

我也玩这个正常,但一切都漂浮在这个背景图像的顶部,所以这不是一个选项。

最后我应该提到这是一个使用Windows运行时的Windows 8 Windows应用商店应用,因此我在这里无法使用WPF中的某些功能(如ViewPort)。

问题:如何调整XAML网格背景图像的大小/尺寸?

旁注:我认为解决方案可能在于变革......?

更新:每张海报请求都是预期的结果。即使它看起来在这里没有浮动背景图像,在其他地方文本浮在背景上。这就是为什么它需要是一个而不是一个元素。

现在的样子:

Current background image

应该如何看待:

How I want it to look

2 个答案:

答案 0 :(得分:11)

缩放渲染变换应该按照您的意愿执行:(您可能需要设置CenterX和CenterY以使其看起来完全符合您的需要)

    <Grid.Background>
        <ImageBrush Stretch="None" 
                        ImageSource="{Binding ImageSource}" 
                        AlignmentY="Center" 
                        AlignmentX="Center">
            <ImageBrush.Transform>
                <ScaleTransform ScaleX=".5" ScaleY=".5"/>
            </ImageBrush.Transform>
        </ImageBrush>
    </Grid.Background>

答案 1 :(得分:1)

您可以将ImageBrush压缩到自定义ViewPort中,以便它可以达到您想要的大小。

有一些信息:http://keyvan.io/viewbox-and-viewport-in-windows-presentation-foundation

如果你想减少一半,那么你的开始x&amp; y应该是0.25并且结束x,y 0.75。 像这样的东西应该有把戏:

            <Grid.Background>
                <ImageBrush Stretch="None" 
                            ImageSource="{Binding ImageSource}" 
                            AlignmentY="Center" 
                            AlignmentX="Center"
                            Viewport="0.25, 0.25, 0.75, 0.75"/>
            </Grid.Background>

//为Win8编辑可能:

<Grid>
<Grid>
    <Grid.RenderTransform>
        <ScaleTransform RenderTransformOrigin="0.5, 0.5" ScaleX="0.5" ScaleY="0.5" />
    </Grid.RenderTransform>

    <Grid.Background>
    <ImageBrush Stretch="None" 
        ImageSource="{Binding ImageSource}" 
        AlignmentY="Center" 
        AlignmentX="Center"/>
    </Grid.Background>
</Grid>
</Grid>