J'utilise le Microsofts RibbonControlLibrary pour un menu Ruban avec plusieurs RibbonCommands. J'ai un TabControl qui devrait contenir des onglets pour chaque bouton de ruban pressé. Par exemple. Je clique sur RibbonCommand 2, je veux qu'un onglet appelé "Tab2" soit créé, s'il n'est pas déjà présent dans le TabControl, sinon il devrait être focalisé.Comment combiner le mécanisme d'événement RibbonControlLibrary Ribbon pour qu'il fonctionne avec un TabControl?
J'ai déjà implémenté http://www.codeproject.com/KB/WPF/WpfTabCloseButton.aspx, ce qui est très agréable.
Je pense que je ne comprends toujours pas le mécanisme d'événement de WPF. Mon code a fortement adapté le projet d'échantillon du Ribboncontrol.
Voilà comment je mis en œuvre le commandement:
<Window.CommandBindings>
<CommandBinding Command="me:AppCommands.Protokoll" Executed="RibbonButton_Click" />
</Window.CommandBindings>
Le bouton à l'intérieur du RibbonControl ressemble à ce qui suit.
<r:RibbonButton Command="me:AppCommands.Protokoll" />
AppCommands.cs
public class AppCommands
{
public static RibbonCommand Protokoll
{
get { return (RibbonCommand)Application.Current.Resources["ProtokollCommand"]; }
}
}
ResourceDictionary:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
<r:RibbonCommand x:Key="ProtokollCommand"
LabelTitle="foo"
ToolTipTitle="foo"
ToolTipDescription="foo" />
</ResourceDictionary>
Ce que je veux maintenant écrire est une méthode qui crée un onglet pour chaque bouton clic, alors que le tabpage créé contient commandes userc spécifiques. Je ne sais pas, comment mieux implémenter le mappage entre CommandButtons et les onglets. Je pense qu'il est préférable d'utiliser un seul gestionnaire d'événements click plutôt qu'un eventhandler pour chaque bouton. Questions:
1) Comment puis-je savoir quel bouton unique, a déclenché l'événement? J'ai seulement réussi à obtenir l'information dans le ResourceDictionary. Malheureusement, il n'y a pas de propriété comme uniqueID ou quelque chose comme ça. Je l'ai fait avec:
private void RibbonButton_Click(object sender, RoutedEventArgs e)
{
// ((Microsoft.Windows.Controls.Ribbon.RibbonCommand)(((System.Windows.Controls.Button)(e.OriginalSource)).Command))
}
Je ne veux pas créer un mappage basé sur une propriété comme LabelTitle qui est censé pour l'affichage.
2) J'ai trouvé ce WPF/C#: How does one reference TabItems inside a TabControl? qui m'a montré comment interroger la collection Items du TabControl. Est-ce une bonne tentative ou y en a-t-il une meilleure?
3)
Comment dois-je créer le mappage entre le RibbonCommand et TabPage + Les contrôles qui doivent être affichés. Bien sûr, je pourrais utiliser un dictionnaire comme
Dictionary<String, fooContainer>
// ...
public class fooContainer()
{
public String TabHeaderString {get;set;}
// other properties
}
Ou est-WPF présente une meilleure approche avec ces ResourceDictionaries, que je ne l'ai pas compris jusqu'à présent.