WPF按比例调整窗口大小,即。没有拉伸或扭曲?

时间:2013-04-27 04:45:29

标签: c# wpf

我有一个包含网格的WPF窗口。它被设置为看起来像Checkers板,所以当窗口调整大小时,我需要网格的正方形保持正方形。

我尝试过很多东西但似乎没什么用。我希望这只是获得正确属性的问题,而不是复杂的问题,但我需要它按比例调整大小。

我也不确定这是否应该在Grid或Window中发生。我会假设Window,因为那是调整大小的控制器,但我可能是错的。 有什么建议?

xaml for Window:

<Window x:Class="TicTacToeClient.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TicTacToeClient"
    Title="Mini-Checkers V1.1" Height="600" Width="600" 
      MinHeight="200" MinWidth="200" MaxHeight="600" MaxWidth="600" >
<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="Game">
            <MenuItem Header="Set Ip Address" Name="IPAddressMenuItem"/>
            <MenuItem Header="Set Name" Name="SetNameMenuItem"/>
        </MenuItem>
    </Menu>
    <TextBlock DockPanel.Dock="Bottom" Text ="Status: " Name="GameStatusBar" />
    <local:TicTacToeBoard x:Name="GameBoard" />
</DockPanel>

网格的xaml:

<UserControl x:Class="TicTacToeClient.TicTacToeBoard"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="600" d:DesignWidth="600">

<Grid Name="MainGrid">
    <Grid.RowDefinitions>
    ....

3 个答案:

答案 0 :(得分:1)

我建议DataBindingWidth Grid Height推荐给<Grid x:Name="Checkerboard" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="{Binding RelativeSource={RelativeSource Self}} Path=ActualHeight}"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <!-- Grid Contents --> </Grid> (反之亦然)。这将确保它总是按比例增长。像这样简单的东西应该有效:

{{1}}

如果你希望你的细胞都保持正方形,只要确保它们都是*大小的,这样它们就会平均分布。

答案 1 :(得分:0)

或者,您可以将网格放在Viewbox Stretch="Uniform"

答案 2 :(得分:0)

您可以尝试将GameBoard封闭在ViewBox中,Stretch属性设置为UniformStretchDirection设置为Both。像这样。它不会保持Form的纵横比均匀,但会保持你的GameBoard比例统一。

<Viewbox  Stretch="Uniform" StretchDirection="Both">
    <local:TicTacToeBoard x:Name="GameBoard" />
</Viewbox>