【问题标题】:Can I customize AvalonDock context menu?我可以自定义 AvalonDock 上下文菜单吗?
【发布时间】:2011-12-19 01:06:32
【问题描述】:

我在一个项目中使用 AvalonDock 来利用工具窗口。

我不需要选项卡式文档,并且希望在我右键单击工具窗口标题栏时禁用“停靠为选项卡式文档”上下文菜单项。这可能吗?

谢谢

【问题讨论】:

    标签: c# wpf contextmenu dock avalondock


    【解决方案1】:

    我认为这是一个简单的属性设置。 我使用来自 codeplex 76560 的最新源代码。

    您可以将 DockableStyle 属性更改为您想要的样式:

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

    并且可以覆盖这个方法来禁用上下文菜单:

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

    这是标志枚举:

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

    【讨论】:

    • 非常感谢,我设法禁用了“停靠为选项卡式文档”之一。你知道我是否也可以删除项目并更改上下文菜单中显示的名称吗?我在浮动模式下发现了几个错误,但发现 DockableContent 的 ContextMenu 属性始终为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多