我有一个包含网格的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>
....
答案 0 :(得分:1)
我建议DataBinding
将Width
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
属性设置为Uniform
,StretchDirection
设置为Both。像这样。它不会保持Form的纵横比均匀,但会保持你的GameBoard比例统一。
<Viewbox Stretch="Uniform" StretchDirection="Both">
<local:TicTacToeBoard x:Name="GameBoard" />
</Viewbox>