我是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>

现在,如果将其设置为拉伸(stretch),则它可以填充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容器中,但是内容不再可缩放以适合窗口。它会变大,这是不好的。

那么我该怎么做呢?我在树错树上吠叫吗?有更好/更容易的方法吗?

最佳答案

您需要将内容(网格)放在Viewbox内,并将Viewbox.Stretch Property设置为Stretch.Uniform
Viewbox控件用于拉伸(stretch)或缩放子元素,并允许您控制子元素的拉伸(stretch)方式。在此处检查examples
c# - 如何在WPF中保持可缩放,可滚动内容的宽高比?-LMLPHP
(来源:microsoft.com)

关于c# - 如何在WPF中保持可缩放,可滚动内容的宽高比?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/288954/

10-12 00:25
查看更多