WPF作为扩展器头的ItemsControl的第一个元素

时间:2016-07-21 12:13:44

标签: c# wpf xaml

我有一个CustomControl:ItemsControl,默认情况下只显示第一个条目(ItemTemplate包含<Grid><TextBlock/><TextBlock/></Grid>)。

当使用Expander(并且它没有展开)时,我只能显示Header。展开后,将显示所有项目。 但实际上我想将第一个项目显示为Expander Header,并且在展开时它应该显示标题下面的itemsource的所有其他项目。

有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要一个可扩展的行 在我的一个应用程序中,我有类似下面的内容: enter image description here

第一行有一些细节,点击扩展器就会填写一个列表。 为了构建这个视图,我使用了一个将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或任何其他适合的东西。 但我认为这是一个你应该看一下的模型。