我对 WPF 相当陌生,并且遇到了一个似乎很难解决的问题。基本上我想要一个可扩展但保持正方形(或任何其他任意)纵横比的 4x4 网格。这实际上看起来很棘手,这让我感到惊讶,因为我认为这是一个相当普遍的要求。
我从这样的网格定义开始:
<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>
现在,如果您将其设置为拉伸,它可以填充 Window 或您放入的任何容器。行和列是统一的,但纵横比不固定。
然后我尝试将其放入 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 容器中,但随后内容不再缩放以适应窗口。它变成全尺寸,这不好。
那么我该怎么做呢?我在吠叫错误的树吗?有没有更好/更简单的方法来做到这一点?