2011-05-30 81 views
2

我有點卡住實現一個相當簡單的佈局要求。我想要顯示圖像並在圖像下方顯示一個按鈕。圖像應該作爲一個整體顯示 - 所以它應該按比例縮小,但不應該放大。WPF佈局問題

這裏是我想要的東西:

mockup

看似簡單,但我無法弄清楚,如果這甚至有可能在XAML。顯然Stackpanel不起作用,也不是DockPanel,我也看不到Grid的解決方案。

這是我嘗試用DockPanel中:

<DockPanel> 
    <Button DockPanel.Dock="Bottom">Button</Button> 
    <Viewbox 
     Stretch="Uniform" 
     MaxWidth="{Binding ElementName=bigImage, Path=ActualWidth}" 
     MaxHeight="{Binding ElementName=bigImage, Path=ActualHeight}"> 
     <Image x:Name="bigImage"/> 
    </Viewbox> 
</DockPanel> 

顯然,圖像視框會一直填補剩餘的空間,因此該按鈕將永遠在整個容器的底部,而不是在圖像的底部。

任何想法?

回答

2

這應該做你想要什麼:

<Grid> 
    <DockPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Button DockPanel.Dock="Bottom">Button</Button> 
     <Image x:Name="bigImage" StretchDirection="DownOnly" /> 
    </DockPanel> 
    </Grid> 
+0

感謝您指出了DownOnly屬性。但問題仍然存在,因爲按鈕始終位於整個dockpanel容器的底部,而不是在圖像下方。 – 2011-05-30 09:58:34

+0

這就是爲什麼我將水平和垂直對齊設置爲居中:通過這種方式,DockPanel獲取其內容的大小,並且該按鈕位於圖像下方。我試過了,它工作正常......你使用完全相同的代碼? – 2011-05-30 10:08:44

+0

我認爲他意味着按鈕水平延伸。您可以將Horizo​​ntalAlignment =「Left」添加到按鈕。 – Vicro 2011-05-30 10:17:47

1
<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Image Source="photo.PNG" Stretch="Uniform" StretchDirection="DownOnly"/> 
    <Button Content="Button" Grid.Row="1" HorizontalAlignment="Left"/> 
</Grid> 

您只能使用一個網格。將StretchDirection設置爲DownOnly時,不需要指定最大大小。

+0

但是,當列的高度設置爲*時,按鈕仍然位於容器的底部,而不是在圖像的正下方。 – 2011-05-30 09:57:46

+0

這取決於什麼是網格的父。現在網格沒有設置,所以如果它在另一個網格或邊框中,​​它會延伸到像你說的那樣填充最大區域。如果網格居中,它將使用最小的空間並將按鈕和圖像保持在一起。你能提供更多的xaml嗎? – Vicro 2011-05-30 10:11:58

+0

+1:謝謝你的建議。是的,電網是在另一個電網內。我按照托馬斯的建議去了,但是感謝你的意見。 – 2011-05-30 10:24:22