2012-10-04 44 views
0

抱歉,不好的标题,但WPF显然是对我说谎,所以我不知道该怎么说。我复制一个非常简单的示例来演示我的问题:为什么网格对我撒谎?

XAML:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" > 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <Button Height="50" Grid.Row="0" ></Button> 
     <Button Height="100" Grid.Row="1" Grid.RowSpan="2"> </Button> 
    </Grid> 
</Window> 

这是你会得到什么:

enter image description here

XAML设计显示,第1行的高度和2是50,但他们显然不相等,所以第二行不能有50的高度。我怀疑这是与事实,我设置第二个按钮的行跨度属性为2,但我不明白为什么这弄乱了行嘿ghts,我按像素设置。

我该如何强制让第1行和第2行的高度固定为50?

编辑:我想我需要详细说明我的问题。我可能严重误解了网格是如何工作的,所以请耐心等待,如果我能告诉我。

首先,什么我有一个很难理解

enter image description here

为什么是高度的行1和2显示为50?它们显然不相同,所以第2行不能有50的高度。这是设计视图中的错误还是预期的行为?

因为当我做出如上图所示我行定义,下面的图片是我所期待的(请注意,下面的图片是Photoshop处理来证明我的观点):

enter image description here

其中行1,2高度是固定为50,按钮的其余部分是第三行的高度设置为。

+0

第二个按钮横跨高度为50和1 *的两行,这正如图所示。究竟是什么问题? – McGarnagle

回答

3

首先 - 您的控件可能会从网格中的行或列大小中排除。所以这是预期的行为(没有人说谎或欺骗你)。

而不是使用高度使用maxHeight属性的,尝试了这一点:

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="50"/> 
      <RowDefinition MaxHeight="50"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Button Height="50" Grid.Row="0" ></Button> 
     <Button Height="100" Grid.Row="1"></Button> 
</Grid> 

编辑:

XAML设计视图是相当混乱,因为它告诉你很多事情在一个很小的区域。数百行,如果你有一个大的UI组件,那么有时你甚至不能看到一些控件。

所以不是分析XAML浏览器设计的,如果你用以下两件事情那么这将是您轻松了解电网的UI -

  1. 设置ShowGridLines属性可Grid为true。这会显示虚线边框线。
    2.使用WPFInspecter
+0

那么这当然能解决我的问题,但我仍然对此行为感到困惑。如果您有机会,请查看我的更新。 – l46kok

+0

我在回答中添加了更多行。尝试这个 –