防止StackPanel项重叠

时间:2015-02-05 03:19:25

标签: wpf xaml windows-phone controls stackpanel

我正在设计Windows Phone应用程序,我想将TextBlock和Button水平堆叠在一起。这是我想要实现的伪代码:

<StackPanel Name="titlePanel" Orientation="Horizontal" Margin="0,-6.5,0,26.5">
    <TextBlock Name="titleBox" Text="{Binding Title}" Style="{ThemeResource HeaderTextBlockStyle}" CharacterSpacing="{ThemeResource PivotHeaderItemCharacterSpacing}"/>
    <Button Content="press" Width="whatever space is left" Length="what the width is"/> <!--how do I do this?-->
</StackPanel>

当我尝试放Width="*"时出错,所以我希望做Width="titlePanel.Width - titleBox.Width"Length="this.Width"这样的事情,但我似乎无法做到能够引用XAML中的其他对象。我不想在每次出现该页面时插入代码隐藏文件来格式化Button的大小......这将如何实现?

2 个答案:

答案 0 :(得分:1)

您无法使用StackPanel执行此操作,因为堆栈面板会测量具有正无穷大的每个子元素作为堆叠元素的轴的约束。子控件必须返回它们想要的大小(正无穷大不是来自任一轴的MeasureOverride的有效返回),因此它们返回一切适合的最小尺寸。他们无法知道他们真正需要填充多少空间。

因此,您应该使用网格来实现所需的行为。

答案 1 :(得分:0)

您可以将网格控制用于此类目的

尝试这个

<Grid HorizontalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <TextBlock Name="titleBox" Grid.Column="0" Margin="5,0" HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="Your text goes here." />
        <Button Content="press" Grid.Column="1" Margin="5,0" HorizontalAlignment="Stretch"/>

    </Grid>

希望这有帮助。