2009-04-10 9 views
4

J'utilise le ruban de bureau WPF, et j'ai une vue de contenu que je voudrais ajouter de nouveaux éléments au ruban lorsque cette vue devient active. J'ai du code qui ajoute un nouveau RibbonCommand ainsi qu'un nouveau RibbonButton au groupe que je veux, mais rien ne se passe quand je l'ajoute. Cependant, si j'ajoute un nouveau groupe avec le bouton, il se lève bien et est lié correctement. Y at-il une méthode pour l'obtenir pour mettre à jour que j'ai manqué? J'ai essayé UpdateLayout() et ça ne marche pas non plus. Je voudrais vraiment essayer d'éviter de reconstruire tous les groupes à chaque fois que la vue change.Ajout de nouveaux éléments au ruban WPF via le code

Travaux:

public void InjectItems(IView view) 
{ 
var ribbonCommands = ProcessRibbonCommands(view.GetViewModel().Tasks, view.GetType()); 
var group = new RibbonGroup(); 
group.Command = new RibbonCommand() { LabelTitle = "Group Test" };    

foreach (RibbonCommand command in ribbonCommands) 
{ 
    shell.MainRibbon.Resources.Add(command.Name, command); 
    group.Controls.Add(new RibbonButton { Command = command }); 
} 

shell.MainRibbon.SelectedTab.Groups.Add(group); 
} 

ne fonctionne pas:

public void InjectItems(IView view) 
{ 
var ribbonCommands = ProcessRibbonCommands(view.GetViewModel().Tasks, view.GetType()); 
var group = shell.MainRibbon.SelectedTab.Groups[0]; //I have a default group, will fix later 

foreach (RibbonCommand command in ribbonCommands) 
{ 
    shell.MainRibbon.Resources.Add(command.Name, command); 
    group.Controls.Add(new RibbonButton { Command = command }); 
} 
} 
+0

Avez-vous déjà trouvé cela? Je rencontre le même problème et je ne peux pas ajouter de nouveaux éléments à un groupe existant via le code. –

Répondre

9

Je suppose que vous utilisez le CTP Microsoft ruban à partir du site OfficeUI.

Dans le cadre de l'accord de licence, vous devez suivre un certain nombre de règles de style. L'un d'entre eux est que vous n'ajoutez/supprimez pas le contenu du ruban en fonction de votre vue actuelle.

de la doc:

contrôles affichés dans un groupe NE DOIT PAS changer à la suite de la sélection. Si un contrôle n'est pas actif, le contrôle DOIT être grisé, plutôt que supprimé du groupe. Cela offre une expérience plus prévisible et empêche la disposition des contrôles sur le ruban de modifier et de distraire les utilisateurs.

Cela étant dit, cela ressemble à un onglet Contexte est exactement ce que vous cherchez. Ceux-ci peuvent être désactivés et activés, mais le contenu réel de l'onglet ne change pas.

C'est le code pour créer un onglet contextuel dans XAML:

<!--Context Groups--> 
     <r:Ribbon.ContextualTabGroups> 
      <!--Piece Contextual Group--> 
      <r:RibbonContextualTabGroup x:Name="grpPieceContext" Label="Piece Tools"> 
       <r:RibbonTab Label="Piece Information" Name="tabPieceContextInfo"> 
        <r:RibbonGroup Name="grpPieceDetails" Command="{StaticResource PieceInformationGrpCommand}"> 
         <r:RibbonLabel x:Name="lblPieceTag"/> 
         <r:RibbonTextBox Name="txtPieceDescription" Command="{StaticResource PieceNameTextboxCommand}" 
             TextChanged="txtPieceDescription_TextChanged" MaxLength="32"/> 
         <r:RibbonLabel x:Name="lblPieceLocation"/> 
        </r:RibbonGroup> 
       </r:RibbonTab> 
      </r:RibbonContextualTabGroup> 
     </r:Ribbon.ContextualTabGroups> 

vous pouvez alors l'onglet actif et de-actif via ce code:

 if (!this.grpPieceContext.IsActive) 
     { 
      this.grpPieceContext.IsActive = true; 
      this.grpPieceContext.Color = Colors.Orange; 
     } 

où l'orange est la couleur se trouve derrière le groupe de contexte.

Hope this helps

+0

Vous n'êtes pas votre! ''. –

+0

@Phil: O.o. Sentez-vous mieux savoir? : P –

+0

Non! C'est toujours faux. :( –

1

J'ai fini juste de supprimer et de recréer le groupe et l'onglet entier si nécessaire.

Questions connexes