我對WPF相當陌生,而且遇到了一個似乎有點棘手難題的問題。基本上我想要一個可擴展的4x4網格,但保持一個方形(或任何其他任意)的高寬比。這實際上看起來相當棘手,這令我感到驚訝,因爲我會想象它是一個相當普遍的要求。如何保持WPF中可伸縮,可滾動內容的縱橫比?
我開始與電網的定義是這樣的:
<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>
現在,如果你設置伸展,它可以填補窗口或任何容器,你把它的行和列是統一的,但縱橫。比例不固定。
然後我試着把它放在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和網格(單獨)放入適當的ScrollViewer容器中,但隨後內容不再縮放以適應窗口。它達到全尺寸,這是不好的。
那麼我該如何去做這件事?我吠叫錯了樹嗎?有沒有更好/更簡單的方法來做到這一點?
有沒有辦法將框架鎖定到均勻拉伸的邊緣? – Jeff 2014-07-25 13:42:42