我无法理解的Viewbox行为

时间:2009-06-02 19:08:52

标签: wpf viewbox

我有一个DataTemplate,用作描述Version对象的徽标。徽标只是一个图像,上面有一些文字。

我必须在2个地方使用DataTemplate: - 作为按钮的内容 - 作为ListBox的缩略图项目

问题是,ListBox中的徽标必须小于Button中的徽标。这不会给徽标图像带来麻烦,徽标图像会自动缩放。但字体大小不会自动缩放。

所以我被建议使用ViewBox作为我整个徽标的XAML描述的父级。

这是DataTemplate:

        <DataTemplate DataType="{x:Type l:Version}">
            <Viewbox>
                <Grid Width="175">
                    <Image Source="{StaticResource Crate}"/>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>

                        <TextBlock Grid.Row="0" FontSize="18" Text="{Binding Type}" />
                        <TextBlock Grid.Row="1" FontSize="20" Text="{Binding Platform}" />
                        <TextBlock Grid.Row="2" FontSize="20" Text="{Binding ApprovedVersion}" />
                        <TextBlock Grid.Row="3" FontSize="16" Text="{Binding StringFormat=C\{0\}, Path=CodeChangeList}" />
                        <TextBlock Grid.Row="4" FontSize="16" Text="{Binding StringFormat=D\{0\}, Path=DataChangeList}" />
                        <TextBlock Grid.Row="5" FontSize="16" Text="{Binding StringFormat=S\{0\}, Path=SoundChangeList}" />
                    </Grid>
                </Grid>
            </Viewbox>
        </DataTemplate>

然后我只需将我的按钮的DataContext更改为Version对象即可使用此模板。然后自动使用DataTemplate。

             <Button 
                x:Name="buttonVersion"
                Width="300"
                Height="300"
                Click="SelectVersionButton_Click"
                Background="Transparent"
                Content="{Binding}">
             </Button>

为什么我的徽标没有填满整个按钮?很明显,利润无处不在,我无法解释这一点。

有趣的是,如果我从Grid子项(ViewBox的子项)中删除Width =“175”,则ViewBox将完全填充该按钮。 但是,我的徽标的字体大小不再正确缩放,因为此网格宽度类似于ViewBox应该用来适当缩放其余部分的“参考尺寸”...

提前致谢

1 个答案:

答案 0 :(得分:1)

好的,问题是如何解决的:

  1. 在DataTemplate的网格中删除宽度= 175
  2. 再次调整字体大小
  3. 我的字体大小已根据175x175的包装箱图像进行了调整。箱子图像是256x256。如果在Grid元素中未指定Width = 175,则ViewBox将根据图像的原始大小(256x256)计算比率。此外,由于ViewBox,按钮300x300现在完全由包装箱图像填充,并且字体大小也相应增加。

    因此,在第2步中,我必须调整256x256图像的字体大小,而不是175x175图像的字体大小。