7 votes

Puis-je personnaliser le menu contextuel d'AvalonDock ?

J'utilise AvalonDock dans un projet pour tirer parti de l'outil Windows.

Je n'ai pas besoin de documents à onglets et j'aimerais désactiver l'élément de menu contextuel "Dock as Tabbed Document" lorsque je fais un clic droit sur la barre de titre d'une fenêtre d'outil. Est-ce possible ?

Gracias

3voto

punker76 Points 4252

Je pense qu'il s'agit d'un simple réglage de propriété. J'utilise la dernière source de Codeplex 76560.

vous pouvez modifier la propriété DockableStyle pour lui donner le style que vous souhaitez :

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

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);
  }
}

voici l'enum flag :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X