我对WPF还比较新,遇到了一个看起来有点棘手的问题。基本上,我想要一个可缩放的4x4网格,但保持正方形(或任何其他任意)纵横比。实际上,这似乎很难做到,这让我很惊讶,因为我认为这是一个相当普遍的需求。
我先从这样一个Grid定义开始:
<Grid>
<Grid.RowDefinitions>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
</Grid.ColumnDefinition>
...
</Grid>
如果将其设置为stretch,它可以填充窗口或任何容器。行和列是均匀的,但长宽比不固定。
然后我尝试将其放入StackPanel中以利用可用空间。这并没有帮助。让我接近目标的是当我记起Viewboxes时。
<StackPanel Orientation="Horizontal">
<Viewbox>
<Grid Height="1000" Width="1000"> <!-- this locks aspect ratio -->
<Grid.RowDefinitions>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
</Grid.ColumnDefinition>
...
</Grid>
</viewbox>
<Label HorizontalAlignment="Stretch">Extra Space</Label>
</StackPanel>
现在我的内容可以进行缩放并保持纵横比。问题是如果窗口不够宽,我的一些网格会超出屏幕。如果情况如此,我想能够滚动到那里。同样,我可能需要一个最小尺寸,这可能导致垂直滚动。
现在我已经尝试将我的StackPanel和Grid(分别)放入适当的ScrollViewer容器中,但然后内容就不再按比例缩放以适合窗口。它会变成全尺寸,那不好。
那么我该怎么做?我是否走错了路?有更好/更容易的方法吗?