防止 StackPanel 项目重叠

Preventing StackPanel items from overlapping

我正在设计一个 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 中的其他对象。我不想在每次出现该页面时都放入代码隐藏文件来格式化按钮的大小...这将如何实现?

您可以使用网格控件来达到这种目的

试试这个

<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>

希望对您有所帮助。

你不能用 StackPanel 做到这一点,因为堆叠面板测量每个具有正无穷大的子元素作为它堆叠元素的轴的约束。子控件必须 return 它们想要的大小(正无穷大不是来自任一轴的 MeasureOverride 的有效 return ),因此它们 return 最小的尺寸可以容纳所有东西。他们无法知道他们真正需要填充多少 space。

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