WrapPanel儿童占据父母的全宽

时间:2016-08-31 09:59:44

标签: c# wpf xaml

我在WrapPanel中有两个元素,一个按钮和另一个WrapPanel。该按钮具有动态宽度。问题是子WrapPanel假定父WrapPanel的整个宽度,由于左边的Button而向右溢出。

WrapPanel overflowing

final Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);

如何让它适合窗户?

2 个答案:

答案 0 :(得分:2)

问题可能是由Orientation="Vertical"引起的。 根据{{​​3}}, 如果Orientation属性设置为Horizo​​ntal,则子内容首先形成水平行,如果需要,则形成垂直堆栈行。如果Orientation属性设置为Vertical,则子内容首先位于垂直列中,如果空间不足,则会进行换行并添加水平维度中的其他列。

此处您已将“方向”设置为“垂直”,并且未将“默认宽度”设置为“Wrappanel”。这导致了这个问题。包装垂直发生并导致子内容移出可见区域。 为wrappanel定义一个恒定的宽度或适合窗口宽度,如:Width="{Binding ElementName=Window, Path=Width}"或尝试删除Orientation="Vertical"

修改 我提供了一个解决方案来解决您的问题。该方法是在父包装内使用Grid来将按钮和内容之间的空间等分为2个相等的列。检查这是否有帮助。

<WrapPanel Height="200"
           VerticalAlignment="Top"
           Orientation="Vertical">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Button x:Name="BookCover"
                Grid.Column="0"
                Margin="10"
                Click="ChangeImageFile">
            button style and content
        </Button>
        <WrapPanel Grid.Column="1" Margin="10">
            <TextBox Text="New Book" />
            <TextBox Text="Lorem ipsum dolor sit amet, eos iusto graece consetetur cu, an dicam nonumy volutpat qui, usu at nullam alienum. Est suas autem augue ad, integre vituperatoribus quo id, delicata gloriatur pro ei. Vel at nisl decore, ut eum altera commune. Nec at agam menandri, putant insolens suavitate ei mei, ea possim veritus mea. Nec nemore iuvaret detracto at, quodsi consectetuer pri id. Integre suscipit voluptua no pro, nonumes incorrupte ut mea. Delenit democritum vel in, quem tale everti vim id, id vis melius necessitatibus. Paulo signiferumque per te. Cu mei modus exerci partiendo, ad iudico adolescens mea, et stet integre civibus mea." TextWrapping="Wrap" />
        </WrapPanel>
    </Grid>
</WrapPanel>

答案 1 :(得分:1)

正如我在评论中所说,使用Grid之类的东西应该是好的:

<Window ...>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/> <!--to fit to the content-->
            <ColumnDefinition Width="*"/> <!--fill all the remaining-->
        </Grid.ColumnDefinitions>
        <Button x:Name="BookCover" Click="ChangeImageFile" Margin="10">
            button style and content
        </Button>
        <StackPanel Grid.Column="1" Margin="10">
            <TextBox Text="New Book"></TextBox>
            <TextBox Text="Lorem ipsum dolor sit amet, eos iusto graece consetetur cu, an dicam nonumy volutpat qui, usu at nullam alienum. Est suas autem augue ad, integre vituperatoribus quo id, delicata gloriatur pro ei. Vel at nisl decore, ut eum altera commune. Nec at agam menandri, putant insolens suavitate ei mei, ea possim veritus mea. Nec nemore iuvaret detracto at, quodsi consectetuer pri id. Integre suscipit voluptua no pro, nonumes incorrupte ut mea. Delenit democritum vel in, quem tale everti vim id, id vis melius necessitatibus. Paulo signiferumque per te. Cu mei modus exerci partiendo, ad iudico adolescens mea, et stet integre civibus mea." TextWrapping="Wrap"></TextBox>
        </StackPanel>
    </Grid>    
</Window>

结果: result