2011-10-31 2 views
7

J'utilise AvalonDock dans un projet pour tirer parti des fenêtres d'outils.Puis-je personnaliser le menu contextuel AvalonDock?

Je n'ai pas besoin de documents à onglets et je souhaite désactiver l'élément de menu contextuel «Dock as Tabbed Document» lorsque je clique avec le bouton droit de la souris sur une barre de titre de la fenêtre d'outils. Est-ce possible?

Merci

Répondre

3

Je pense que c'est un simple paramètre de propriété. i utiliser la dernière source CodePlex 76560.

vous pouvez modifier la propriété DockableStyle au style que vous voulez:

<ad:SampleDockableContent DockableStyle="DockableToBorders" 
        x:Name="DockingManagerPropertiesHost" 
        Title="Only dock to borders"> 
</ad:SampleDockableContent> 

et peut remplacer cette méthode pour désactiver le menu contect:

public partial class SampleDockableContent : DockableContent 
{ 
    public SampleDockableContent() { 
    this.InitializeComponent(); 
    this.DataContext = this; 
    } 

    protected override bool CanExecuteCommand(ICommand command) { 
    if (command == DockableContentCommands.ShowAsDocument) { 
     if (this.DockableStyle == DockableStyle.DockableToBorders) { 
     return false; 
     } 
     if (this.State == DockableContentState.Document) { 
     return false; 
     } 
    } 
    return base.CanExecuteCommand(command); 
    } 
} 

ici est le drapeau ENUM:

/// <summary> 
/// Defines how a dockable content can be dragged over a docking manager 
/// </summary> 
/// <remarks>This style can be composed with the 'or' operator.</remarks> 
public enum DockableStyle : uint 
{ 
    /// <summary> 
    /// Content is not dockable at all 
    /// </summary> 
    None = 0x0000, 

    /// <summary> 
    /// Dockable as document 
    /// </summary> 
    Document = 0x0001, 

    /// <summary> 
    /// Dockable to the left border of <see cref="DockingManager"/> 
    /// </summary> 
    LeftBorder = 0x0002, 

    /// <summary> 
    /// Dockable to the right border of <see cref="DockingManager"/> 
    /// </summary> 
    RightBorder = 0x0004, 

    /// <summary> 
    /// Dockable to the top border of <see cref="DockingManager"/> 
    /// </summary> 
    TopBorder = 0x0008, 

    /// <summary> 
    /// Dockable to the bottom border of <see cref="DockingManager"/> 
    /// </summary> 
    BottomBorder= 0x0010, 

    /// <summary> 
    /// A <see cref="DockableContent"/> with this style can be hosted in a <see cref="FloatingWindow"/> 
    /// </summary> 
    Floating = 0x0020, 

    /// <summary> 
    /// A <see cref="DockableContent"/> with this style can be the only one content in a <see cref="DockablePane"/> pane (NOT YET SUPPORTED) 
    /// </summary> 
    /// <remarks>This style is not compatible with <see cref="DockableStyle.Document"/> style</remarks> 
    Single = 0x0040, 

    /// <summary> 
    /// A <see cref="DockableContet"/> with this style can be autohidden. 
    /// </summary> 
    AutoHide = 0x0080, 

    /// <summary> 
    /// Dockable only to a border of a <see cref="DockingManager"/> 
    /// </summary> 
    DockableToBorders = LeftBorder | RightBorder | TopBorder | BottomBorder | AutoHide, 

    /// <summary> 
    /// Dockable to a border of a <see cref="DockingManager"/> and into a <see cref="DocumentPane"/> 
    /// </summary> 
    Dockable = DockableToBorders | Document | Floating, 

    /// <summary> 
    /// Dockable to a border of a <see cref="DockingManager"/> and into a <see cref="DocumentPane"/> but not in autohidden mode (WinForms controls) 
    /// </summary> 
    DockableButNotAutoHidden = Dockable & ~AutoHide 
} 
+0

Merci beaucoup, j'ai réussi à désactiver le document "Dock as tabbed". Savez-vous si je peux également supprimer des éléments et changer le nom qui apparaît dans le menu contextuel? J'ai repéré quelques erreurs en mode flottant, mais j'ai trouvé que la propriété ContextMenu de DockableContent est toujours nulle. –

Questions connexes