【问题标题】:WPF First element of ItemsControl as Expander HeaderWPF ItemsControl 的第一个元素作为扩展标题
【发布时间】:2016-07-21 12:13:43
【问题描述】:

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

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

有人对此有解决方案吗?

【问题讨论】:

  • 你考虑过使用 ComboBox 吗?

标签: c# wpf xaml


【解决方案1】:

如果我理解正确,您需要一个可展开的行 在我的一个应用程序中,我有如下内容:

第一行有一些详细信息,通过单击扩展器会填写一个列表。 为了构建这个视图,我使用了一个将 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>

结果在图片中 -> 一个可展开的行,可以在详细信息中显示其他对象的列表。当然,您可以使用 ListView 或 ItemsControl 或任何其他适合的东西。 但我认为这是一个你应该看看的模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2016-05-05
    • 1970-01-01
    • 2015-08-28
    • 2013-05-19
    相关资源
    最近更新 更多