Создание ленты wpf во время выполнения

Я пытаюсь привязать ленточный элемент управления к динамическим меню.

<ribbon:Ribbon>
   <ribbon:RibbonTab Header="Reports"
        ItemsSource="{Binding ReportMenus}"
        ItemTemplate="{StaticResource RibbonGroupDataTemplate}">
    </ribbon:RibbonTab>
    <ribbon:RibbonTab Header="Test">
     <ribbon:RibbonGroup Header="TestGROUP"
      ItemsSource="{Binding ReportMenus}"
      ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
     </ribbon:RibbonGroup>
    </ribbon:RibbonTab>
</ribbon:Ribbon>

Верхняя вкладка ленты - это моя «настоящая» риббонтаба. Дно начиналось как построенное вручную, с помощью которого я проверяю свои теории.

Вот шаблоны данных, которые я пытаюсь использовать:

<Style TargetType="{x:Type ribbon:RibbonButton}">
   <Setter Property="Label"
           Value="{Binding ReportDisplayName}" />
</Style>

<DataTemplate x:Key="RibbonButtonDataTemplate">
   <ribbon:RibbonButton />
</DataTemplate>

Это моя первая попытка использовать шаблон Group DataTemplate:

<HierarchicalDataTemplate x:Key="RibbonGroupDataTemplate" DataType="{x:Type Ribbon:RibbonGroup}"
 ItemsSource="{Binding Converter={StaticResource DebugConverter}}"
 ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
   <TextBlock Text="{Binding Path=ReportDisplayName}" />
</HierarchicalDataTemplate>

Тогда я пробовал вот это:

<DataTemplate x:Key="RibbonGroupDataTemplate">
  <ribbon:RibbonGroup ItemsSource="{Binding Converter={StaticResource DebugConverter}}"
          ItemTemplate="{StaticResource RibbonButtonDataTemplate}" />
</DataTemplate>

Проблема в том, что я не могу заставить кнопки отображаться под группой. Если у меня нет шаблона группы, как у моего второго риббонтаба, я могу заставить его работать. Но если я попытаюсь создать группу динамически, кнопки не будут созданы. Кроме того, если сделать табличку с данными с ребристой группой внутри, заголовки будут обрезаны. Я уже читал об этом, и это было причиной попытки использовать HierarchicalDatatemplate. Стандартная табличка данных не позволяет использовать источник или шаблон элемента.

Итак, как мне получить динамическую группу RibbonGroup для отображения динамических кнопок RibbonButtons?


Я внес некоторые другие изменения сейчас и, по крайней мере, заполнил их, но это не правильно.

Сейчас это выглядит так: alt text

Я хочу, чтобы это выглядело так, что частично жестко запрограммировано. alt text

вот xaml

<DataTemplate x:Key="RibbonButtonDataTemplate">
   <ribbon:RibbonButton />
</DataTemplate>

<HierarchicalDataTemplate x:Key="RibbonGroupDataTemplate"
                                  DataType="{x:Type ribbon:RibbonGroup}"
                                  ItemsSource="{Binding ReportsMenuCollection}"
                                  ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
   <TextBlock Text="{Binding Path=ReportDisplayName}" />
</HierarchicalDataTemplate>

единственное, что мне осталось попробовать, - это изменить мой шаблон RibbonButtonDataTemplate на иерархический шаблон данных.


person ecathell    schedule 14.12.2010    source источник


Ответы (1)


Вам потребуются два шаблона иерархических данных и два базовых объекта привязки, один из которых представляет группу, а другой - элемент. Та же концепция применима к динамической структуре меню.

person Steve Psaltis    schedule 14.12.2010
comment
можешь показать мне пример? Я использую только одну самосоединяемую таблицу для создания структур ... id, parentid, reportname; если parentid = id, то это группа, в противном случае - дочерний элемент любого родительского ... - person ecathell; 14.12.2010
comment
нм ... я перешел к другому проекту, над которым работал, с иерархическими данными папок и древовидной структурой. Мне придется изменить способ работы с корневым объектом - person ecathell; 14.12.2010
comment
на самом деле обычная табличка с данными и стили работают нормально ... просто убедитесь, что вы развернули окно до максимума, чтобы вы могли все правильно видеть :) - person ecathell; 18.12.2010