2008-11-14 42 views
32

我對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容器中,但隨後內容不再縮放以適應窗口。它達到全尺寸,這是不好的。

那麼我該如何去做這件事?我吠叫錯了樹嗎?有沒有更好/更簡單的方法來做到這一點?

回答

-2

把0.25 *,而不是*爲每列和RowWidth

0

窗口給你你後的行爲上會設置SizeToContent =「WidthAndHeight」?

5

在這種情況下,最好的辦法是UniformGrid。這隻有在你需要NxN網格時纔有用。