Silverlight RowDetailsTemplate有不成文的限制吗?

时间:2011-03-03 21:35:46

标签: silverlight xaml data-binding

我一直在我的一个Silverlight数据网格中查看RowDetailsTemplate定义的一些代码,并考虑重构它,因为它看起来像是有重复的网格。在看了这个之后,我想,我只需要一个数据网格,但事实证明,这个奇怪的,神秘的双网格需要让所有项目排成一行:

<data:DataGrid.RowDetailsTemplate>
<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition  />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>

        <Grid>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition  />
                 <ColumnDefinition  />
                 <ColumnDefinition />
              </Grid.ColumnDefinitions>
              <Grid.RowDefinitions>
                  <RowDefinition MinHeight="20" />
                  <RowDefinition MinHeight="25" />
                  <RowDefinition MinHeight="25"  />
              </Grid.RowDefinitions>
              <TextBlock Grid.Row="0" Grid.Column="0" Text="Attendee Cap" Margin="0,0,50,0" />
              <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding AttendeeCap}"/>

              <TextBlock Text="Start Date" Grid.Row="1" Grid.Column="0" Margin="0,0,50,0" />
              <controls:DatePicker SelectedDate="{Binding StartDate, Mode=TwoWay}"  Grid.Row="1" Grid.Column="1"/>
             <input:TimePicker Value="{Binding StartDate, Mode=TwoWay}"   Grid.Row="1" Grid.Column="2" MinWidth="65" />

             <TextBlock Text="End Date" Grid.Row="2" Grid.Column="0" Margin="0,0,50,0" />
             <input:TimePicker Value="{Binding EndDate, Mode=TwoWay}"   Grid.Row="2" Grid.Column="2" MinWidth="65" />
            <controls:DatePicker SelectedDate="{Binding EndDate, Mode=TwoWay}"  Grid.Row="2" Grid.Column="1" />
        </Grid>
     </Grid>
</DataTemplate>

我以为我可以摆脱第一个网格定义,只保留内容之前的那个。问题是,如果我摆脱那个网格,文本框,数据选择器和时间戳不会出现。

我是否遗漏了一些关于导致此巫毒行为的RowDetailsTemplate的不成文规则?

1 个答案:

答案 0 :(得分:0)

您可以删除第一个网格中的第三个ColumnDefinition条目,因为没有任何内容分配给它,列定义第二和第三个时刻的唯一目的是将可用宽度分成三个部分。如果执行此操作,但您可能希望将宽度应用于第一列定义,并将第二列保留为自动调整大小以填充剩余空间。

当您在网格中有项目时,它们会自动放在第0列第0行,除非您另行指定。这意味着您的内部网格被放置在外部网格的第一列(第0列)中,因为它没有Grid.Column=""条目。此列目前正在使用其父容器的可用宽度的 1 / 3 。 IOW,外部网格用于约束内部网格。

您可以尝试使用Snoop来确定当前和已修改布局的内容,或者您​​可以为网格添加边框,以便在呈现后可以看到它们的确切位置。