设置在调整 WPF 应用程序大小时保留在页脚区域中的页脚

Set up a footer that stays in the footer area when resize WPF application

我很难在 WPF 应用程序中设置页脚。我希望我的页脚是一个简单的文本,仅此而已,我希望它在调整页面大小时保持静止。该页面在顶部包含一个菜单,一个按钮,该按钮被放入 canvas 中,因为我不希望它更改其大小。我还有一个位于网格中的文本框,我希望它随页面调整大小。在文本框下,我想设置页脚(我用标签设置)。谁能告诉我如何实现这一目标?我什么都试过了..

这是我的 .XAML 文件的主要部分:

<Grid>
        <Menu>
            <MenuItem Header="_File">
                <MenuItem Header="_Exit" Command="{Binding x}"/>
            </MenuItem>
            <MenuItem Header="_View">
                <MenuItem Header="Logs" Comm`enter code here`and="{Binding y}" />
            </MenuItem>
        </Menu>
        <Canvas Margin="0,0,-0.4,432.6">
            <Button Command="{Binding z}" Name="Button" Canvas.Top="22" Width="122" Height="24" Canvas.Left="10">Download Images</Button>
        </Canvas>
        <Canvas Margin="0,0,-0.4,432.6">
            <Label HorizontalAlignment="Left" Width="108" Canvas.Left="10" Height="25" Canvas.Top="47">Status</Label>
        </Canvas>
        <TextBox Name="MessageDisplay" Text="{Binding q, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,IsAsync=True}"  Margin="10,73,10.6,44.6"/>
        <Label Margin="0,475,-0.4,-0.4">Footer !!!</Label>
</Grid>

这是我 运行 应用程序时的样子: Before any resize

这是我最大化页面后发生的事情: maximized

您应该利用 RowDefinitions 让您的 Grid 可靠地执行此操作。不要为特定区域设置 canvas 位置和边距,否则您的调整大小永远不会正确。边距是一个很好的工具,但它应该设置在布局内控件所在区域的范围内

指定您的行定义及其高度。这是使用您的代码的示例。行从索引 0 开始。以这个例子为例,查找有关在 WPF 中指定网格行和列布局的更多信息。不过,这应该能让您走上正确的道路。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="40"/>
        <RowDefinition Height="40"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Menu>
        <MenuItem Header="_File">
            <MenuItem Header="_Exit" Command="{Binding x}"/>
        </MenuItem>
        <MenuItem Header="_View">
            <MenuItem Header="Logs"  />
        </MenuItem>
    </Menu>
    <Canvas Grid.Row="1">
        <Button Command="{Binding z}" Name="Button" Margin="5" Width="122" Height="24" >Download Images</Button>
    </Canvas>
    <Canvas Grid.Row="2">
        <Label HorizontalAlignment="Left" Width="108"  Height="25" >Status</Label>
    </Canvas>
    <TextBox Grid.Row="3" Name="MessageDisplay" Text="{Binding q, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,IsAsync=True}"  Margin="5"/>
    <Label Grid.Row="4" >Footer !!!</Label>
</Grid>