窗口自適應就是說,當主窗口縮放的時候,內部的控件位置自動的調整,而不是隱藏掉。這主要依賴於Grid布局。
1.比如這個groupbox 本身是在一個Grid的Row中的。縮放之后,左邊的button不見了。
開始:
縮放之后:
<GroupBox Name="EmailGroupBox" Grid.Row="1" Grid.Column="0" Header="電子郵件" Margin="0,10,10,10" > <StackPanel Name="Panel" Orientation="Horizontal"> <Grid Name="MinGrid" Width="{Binding ElementName=Panel, Path=ActualWidth}"> <Grid.RowDefinitions> <RowDefinition MinHeight="20" Height="Auto"></RowDefinition> <RowDefinition MinHeight="1" Height="*"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition MinWidth="60" Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*" MinWidth="100"></ColumnDefinition> <ColumnDefinition MinWidth="70" Width="Auto" ></ColumnDefinition> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" >郵件地址:</Label> <TextBox TabIndex="1" Grid.Row="0" Grid.Column="1" MinWidth="100" Text="{Binding ServerEmailAddress, UpdateSourceTrigger=LostFocus}" HorizontalAlignment="Stretch" VerticalContentAlignment= "Center"></TextBox> <Button Grid.Row="0" TabIndex="2" Grid.Column="2" HorizontalAlignment="Stretch" Margin="5 0 5 0" Click="EmailConfigButton_Click">設置</Button> </Grid> </StackPanel> </GroupBox>
拿掉 StackPanel就可以縮放(本身也是多余的代碼)。最小寬高都可以省略。因為這里的最小寬度無法阻擋主窗口的縮放,最小寬高直接放到子控件上面就行,不必放在Row或col上面。 2個row也是多余 修改之后:

<GroupBox Name="EmailGroupBox" Grid.Row="1" Grid.Column="0" Header="電子郵件" Margin="0,10,10,10" > <Grid Name="MinGrid" Width="{Binding ElementName=Panel, Path=ActualWidth}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition /> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" >郵件地址:</Label> <TextBox TabIndex="1" Grid.Row="0" Grid.Column="1" MinWidth="100" Text="{Binding ServerEmailAddress, UpdateSourceTrigger=LostFocus}" HorizontalAlignment="Stretch" VerticalContentAlignment="Center"></TextBox> <Button Grid.Row="0" TabIndex="2" Grid.Column="2" HorizontalAlignment="Stretch" Margin="5 0 5 0" Click="EmailConfigButton_Click">設置</Button> </Grid> </GroupBox>
但也不是說StackPanel 就不能縮放。下面的StackPanel是有縮放的效果的。
<StackPanel Margin="5" Orientation="Horizontal" Grid.Row="3"> <Button TabIndex="4" HorizontalAlignment="Left" Click="AddCustomer" Width="62" Height="28" >新建</Button> <Button HorizontalAlignment="Left" TabIndex="5" Click="DeleteCustomer" Width="62" Margin="20,0,0,0" Height="28" VerticalAlignment="Bottom" >刪除</Button> </StackPanel>
和groupbox組合的時候要注意。