【问题标题】:How to fill the page and adjust text position according to resize如何根据调整大小填充页面并调整文本位置
【发布时间】:2015-09-30 09:49:21
【问题描述】:

我是 xaml 和 Windows 10 Gui 编程的新手。我想设计一个带有 TextBlock、ListBox 和 Button 的页面,所有这些都位于页面的中心。无论用户如何调整窗口大小,我都希望 TextBlock 和按钮始终位于页面的顶部和底部。 ListBox 应自行拉伸以自动填充 TextBlock 和 ListBox 之间的间隙。我尝试将 VerticalAlignment 设置为不同的值,但它似乎没有做任何事情。

<Page
x:Class="FirstWin10.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:FirstWin10"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Orientation="Vertical">
    <TextBlock x:Name="textBlock" HorizontalAlignment="Center" Margin="10,20,10,0" TextWrapping="Wrap" VerticalAlignment="Top">
        <Run Text="Unkown Screen Name"/>
        <LineBreak/>
        <Run/>
    </TextBlock>
    <ListBox x:Name="listBox" HorizontalAlignment="Center" MinWidth="450" MinHeight="178" Margin="50,20,50,0" VerticalAlignment="Stretch">
        <StackPanel Orientation="Horizontal">
            <CheckBox />
            <TextBox Text="ListBox Item #1" />
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <CheckBox />
            <TextBlock>
                <Run Text="ListBox Item #2"/>
            </TextBlock>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <CheckBox />
            <TextBlock>
                <Run Text="ListBox Item #3"/>
            </TextBlock>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <CheckBox />
            <TextBlock>
                <Run Text="ListBox Item #4"/>
            </TextBlock>
        </StackPanel>
    </ListBox>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Center" Margin="10,20,10,0" VerticalAlignment="Bottom"/>
</StackPanel>

【问题讨论】:

    标签: windows xaml uwp


    【解决方案1】:

    考虑使用三行的Grid。第一行和最后一行自动拉伸到TextBlockButton 的大小;中间一行占据了其余的空间。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" HorizontalAlignment="Center" /> <!-- Grid.Row="0" can be removed as it's the default -->
        <ListBox Grid.Row="1" HorizontalAlignment="Center" />
        <Button Grid.Row="2" HorizontalAlignment="Center" />
    </Grid>
    

    【讨论】:

    • 谢谢@贾斯汀。这就是我想要的。
    • 一个小问题,如何使TextBox根据窗口大小进行拉伸?使用 Grid 的相同解决方案?
    • 它应该自动拉伸。但如果将它放在 ListBox 中,则需要覆盖其 ItemContainerStyle。尝试谷歌搜索,SO上有很多答案告诉你如何去做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2016-10-17
    • 2013-10-09
    相关资源
    最近更新 更多