Stackpanel重叠图像

时间:2014-11-06 15:06:08

标签: wpf xaml

我有Grid配置了列。在第一列中,我有Image,第二列StackPanelTextBlocks,其余列有其他TextBlock。

当我运行app时,我看到了Image和其他的TextBlocks。问题是StackPanel与Image重叠(TextBlock的内容显示在Image上),部分内容显示在Grid的其他列下。我将MinWidth添加到Image和Stackpanel,但它没有解决问题:/
看起来Image没有宽度,所以StackPanel与它重叠,StackPanel也没有足够的宽度,所以它隐藏在其他列下。

示例,所有TextBlock都绑定到数据源:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="25" MinWidth="25" />
        <ColumnDefinition Width="120" MinWidth="120" />
        <ColumnDefinition Width="50" />
        <ColumnDefinition Width="50" />
    </Grid.ColumnDefinitions>

    <Image Grid.Column="0" />
    <StackPanel Grid.Column="1" Orientation="Horizontal">
        <Textblock />
        <TextBlock />
    </StackPanel>
    <TextBlock Grid.Column="2" />
    <TextBlock Grid.Column="3" />
</Grid>

1 个答案:

答案 0 :(得分:1)

您已声明具有固定宽度的列。很明显,这些列中的内容比您声明的列宽要宽。

在这种情况下,

MinWidth添加到ImageStackPanel将无济于事。您需要设置这两个项目的MaxWidth,以防止它们比声明的列宽更宽。

设置固定列宽会首先失败使用WPF的目的之一。 WPF,如果正确实现,将允许您的用户界面在窗口大小更改时很好地扩展。

下面显示的是更适合WPF的列定义:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*" />
    <ColumnDefinition Width="4.8*"/>
    <ColumnDefinition Width="2*" />
    <ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>

上面显示的列宽值将给出与示例中固定值相同的宽度比,但是当窗口大小发生变化时,它们是可缩放的。