2010-12-14 3 views
3

J'essaie de créer un lien de rubans pour les menus dynamiques.Création d'un ruban wpf au moment de l'exécution

<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> 

L'onglet du ruban supérieur est mon «vrai» ruban. Le fond a commencé comme construit manuellement que je vérifie mes théories avec.

Voici les DataTemplates que je suis en train d'utiliser:

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

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

Ceci est ma première tentative du groupe DataTemplate:

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

Je tentais celui-ci:

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

Le problème est que je ne peux pas obtenir les boutons pour apparaître dans le groupe. Si je n'ai pas de grouptemplate comme dans mon deuxième ribbontab, je peux le faire fonctionner. Mais si j'essaie de faire le groupe dynamiquement aussi, il ne parvient pas à créer les boutons. En outre, en faisant le datatemplate avec le ribbongroup à l'intérieur de celui-ci, les en-têtes sont coupées. J'ai déjà lu à ce sujet et c'est la raison pour laquelle j'ai essayé d'utiliser le modèle hiérarchique. Le modèle de données standard ne permet pas d'itemource ou d'itemtemplate.

Alors Comment obtenir un RibbonGroup dynamique pour afficher Dynamic RibbonButtons?


J'ai implémenté d'autres changements maintenant et c'est au moins le remplir, mais ce n'est pas correct.

En ce moment, il ressemble à ceci: alt text

Je veux qu'il ressemble à ce qui est partiellement codé en dur. alt text

ici est le 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> 

la seule chose qu'il me reste à faire est de changer mon RibbonButtonDataTemplate à un DataTemplate hiérarchique.

Répondre

0

Vous avez besoin de deux modèles de données hiérarchiques et de deux entités de liaison sous-jacentes, l'une représentant un groupe et l'autre représentant un élément. Le même concept s'appliquerait à une structure de menu dynamique.

+0

pouvez-vous me montrer un exemple? J'utilise seulement une table auto-jointe pour créer les structures ... id, parentid, reportname; si parentid = id alors c'est un groupe, sinon c'est un enfant de tout parentid ... – ecathell

+0

nm ... je suis allé à un autre projet sur lequel je travaillais avec des données hiérarchiques de dossiers et une arborescence. Je dois modifier comment je travaille avec l'objet racine – ecathell

+0

en fait un datatemplate régulier et les styles fonctionnent très bien ... assurez-vous de maximiser votre fenêtre pour que vous puissiez tout voir correctement :) – ecathell

Questions connexes