我有一个CustomControl:ItemsControl,默认情况下只显示第一个条目(ItemTemplate包含<Grid><TextBlock/><TextBlock/></Grid>
)。
当使用Expander(并且它没有展开)时,我只能显示Header。展开后,将显示所有项目。 但实际上我想将第一个项目显示为Expander Header,并且在展开时它应该显示标题下面的itemsource的所有其他项目。
有人有解决方案吗?
答案 0 :(得分:0)
如果我理解正确,你想要一个可扩展的行 在我的一个应用程序中,我有类似下面的内容:
第一行有一些细节,点击扩展器就会填写一个列表。 为了构建这个视图,我使用了一个将RowHeaderTemplate设置为扩展器的DataGrid:
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<telerik:RadExpander x:Name="AddressExpander" telerik:AnimationManager.IsAnimationEnabled="True" Expanded="Address_Expander_Expanded" Collapsed="Address_Expander_Collapsed">
</telerik:RadExpander>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
代码背后:
private void Address_Expander_Expanded(object sender, RoutedEventArgs e)
{
var s = e.OriginalSource as FrameworkElement;
var expander = s as RadExpander;
if (expander != null)
{
var parentRow = s.ParentOfType<DataGridRow>();
if (parentRow != null)
{
parentRow.IsSelected = true;
parentRow.DetailsVisibility = Visibility.Visible;
}
}
}
private void Address_Expander_Collapsed(object sender, RoutedEventArgs e)
{
var s = e.OriginalSource as FrameworkElement;
var expander = s as RadExpander;
if (expander != null)
{
var parentRow = s.ParentOfType<DataGridRow>();
if (parentRow != null)
{
parentRow.IsSelected = false;
parentRow.DetailsVisibility = Visibility.Collapsed;
}
}
}
对于RowDetailsTemplate,我有一个模板,这是另一个DataGrid,很少有这样的标签:
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Itemsource = {Binding *property of parent viewmodel here*} />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
结果在图片中 - &gt;一个可扩展的行,可以在细节中显示其他对象的列表。当然,您可以使用ListView或ItemsControl或任何其他适合的东西。 但我认为这是一个你应该看一下的模型。