我一直在我的一个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的不成文规则?
答案 0 :(得分:0)
您可以删除第一个网格中的第三个ColumnDefinition
条目,因为没有任何内容分配给它,列定义第二和第三个时刻的唯一目的是将可用宽度分成三个部分。如果执行此操作,但您可能希望将宽度应用于第一列定义,并将第二列保留为自动调整大小以填充剩余空间。
当您在网格中有项目时,它们会自动放在第0列第0行,除非您另行指定。这意味着您的内部网格被放置在外部网格的第一列(第0列)中,因为它没有Grid.Column=""
条目。此列目前正在使用其父容器的可用宽度的 1 / 3 。 IOW,外部网格用于约束内部网格。
您可以尝试使用Snoop来确定当前和已修改布局的内容,或者您可以为网格添加边框,以便在呈现后可以看到它们的确切位置。