2012-06-22 26 views
3

我很困惑的WPF网格控件的行为。明星大小行为像自动?

这是我能得到的最简单的再现:

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" MinHeight="100" MaxHeight="300" /> 
      <RowDefinition Height="0.1*" MinHeight="100" /> 
     </Grid.RowDefinitions> 
     <Button Grid.Row="0" Height="200" /> 
     <Button Grid.Row="1" /> 
    </Grid> 
</Window> 

如果你运行它,缩小窗口,你会发现,上面的按钮开始收缩之前底部按钮将被剪掉。

您可以通过从按钮中删除Height="200"来获得所需的行为。但是,在我的实际使用情况中,该按钮被包含ScrollViewer的边框替换。虽然我没有明确地设置高度(但是我做了一个ScrollViewer的内容),但是看到相同的裁剪行为。

所以,问题:

我怎样才能获得该行忽略其内容的高度?还是有另一种方式来获得相同的效果?

+1

我不确定我是否理解这个问题。你的第一个按钮的大小是固定的,除非父母告诉他,否则无论如何他都会使用该高度。即使父母告诉他只使用100个,它也会剪裁它,设置一个固定大小意味着控件的大小是固定的。 RowDefinition中的Star在这种情况下完全没有做任何事情。如果您在第一个按钮中删除高度,您将达到第一行击中其MinHeight的点,并且WPF别无选择,只能将第二行移出视图。 – dowhilefor

+0

+1提供了一个小的,可重现的问题代码示例:) – Rachel

+0

@dowhilefor:我知道第二行最终会被剪辑。我计划在窗口添加一个最小高度来防止这种情况发生。问题在于按钮的高度似乎保持比其他情况下更大的行。 –

回答

2

您的最小网格大小为300(第1行为200,第2行为100),所以Grid的最小尺寸为300.如果将窗口缩小到该尺寸以下,则只需剪切Grid并隐藏部分它,而不是缩放它。

也许你可以切换到使用DockPanel来代替?

<DockPanel> 
    <Button DockPanel.Dock="Bottom" MinHeight="100" /> 
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300" /> 
</DockPanel> 

这样你的底部位总是停靠在屏幕的底部,而其他内容占用剩余空间。

如果你真的想保持你的尺寸比例,我会建议一个转换器,将你的内容控件的高度设置为窗口大小的百分比。

<DockPanel x:Name="Parent"> 
    <Button DockPanel.Dock="Bottom" MinHeight="100" 
      Height="{Binding ActualHeight, 
          ElementName=Parent, 
          Converter={StaticResource PercentConverter}, 
          ConverterParameter=0.1}" /> 
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300" /> 
</DockPanel> 
+0

我不明白最小尺寸是300的部分。100 + 100 = 200.另外,如果我调整窗口的尺寸足够小,最上面的一行会缩小,直到最小尺寸。 –

+0

@KendallFrey没有按钮上的高度比行的Minheight更重要,实际上它只是一个MinHeight。但是你的按钮的高度是200,所以给定MaxHeight为300的行只允许按钮。所以这给你200(固定按钮高度)+100(第二行分高度)= 300。 – dowhilefor

+0

@dowhilefor:为什么然后行不总是保持> = 200?如果窗口变得足够小,则该行会缩小到按钮尺寸以下。 –

相关问题