为什么在设计器中使用的窗口边距在运行程序中变小?

本文关键字:程序 运行 为什么 窗口 | 更新日期: 2023-09-27 18:07:01

在Windows 8.1上使用Visual Studio 2013中的设计器,并创建一个简单的窗口,其中文本框的右侧和底部有10p的边距,当我运行程序时,边距会发生变化。我该如何避免这种情况?

示例图片:(我还不能发布图片,所以这里是裸链接)

https://i.stack.imgur.com/LCrXL.jpg

https://i.stack.imgur.com/PUceC.jpg

另一张图解释得更好。

正如你在上面的图片中看到的,当运行程序时,页边距发生了巨大的变化。

My Windows XAML Code is:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="400" Width="800" Focusable="False" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" UseLayoutRounding="False">
<Grid>
    <TextBox HorizontalAlignment="Left" Height="351" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="774"/>
</Grid>

另一张图片的XAML代码:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="400" Width="800" Focusable="False" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" UseLayoutRounding="False">
<Grid>
    <TextBox HorizontalAlignment="Left" Height="205" Margin="10,156,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="774"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="709,55,0,0" VerticalAlignment="Top" Width="75"/>
    <RadioButton Content="RadioButton" HorizontalAlignment="Left" Margin="699,101,0,0" VerticalAlignment="Top"/>
</Grid>

为什么在设计器中使用的窗口边距在运行程序中变小?

不指定WidthHeight,只需指定一个边距并允许其拉伸:

<TextBox HorizontalAlignment="Stretch" Margin="10" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Stretch" />

请注意,您明确地设置了10,10,0,0的边距,这意味着您将只在2面获得边距-使用单个数字(10)或使所有4个数字10在四周放置偶数边距。


根据新版本编辑:

在这种情况下,更好的方法是使用Grid布局特性:
<Grid>
   <Grid.RowDefinitions>
       <RowDefinition Height="*" />
       <RowDefinition Height="*" />
       <RowDefinition Height="2*" />
   <Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="Auto" />
   <Grid.ColumnDefinitions>
  <TextBox Grid.Row="2" Grid.ColumnSpan="2" Margin="10" TextWrapping="Wrap" Text="TextBox" />
  <Button Grid.Row="0" Grid.Column="1" Content="Button" Margin="10" Width="75"/>
  <RadioButton Grid.Row="1" Grid.Column="1" Content="RadioButton" Margin="10" />
</Grid>