2011-05-30 72 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