You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除AvalonDock LayoutAnchorable的内置停靠组合按钮?

移除AvalonDock LayoutAnchorable的停靠选项下拉按钮

嘿,我之前做WPF项目时刚好碰到过这个需求,给你几个简单可行的方案,完全适配你非MVVM的VB.NET开发场景:

方案1:全局隐藏(最省心)

如果想让所有LayoutAnchorable都去掉这个下拉按钮,直接在App.xaml里定义全局样式就行,一次性搞定所有控件:

<Application.Resources>
    <Style TargetType="{x:Type avalonDock:AnchorableTitleBar}">
        <Setter Property="ContextMenuButtonVisibility" Value="Collapsed" />
    </Style>
</Application.Resources>

这个样式会自动应用到所有LayoutAnchorable的标题栏,直接把下拉按钮设为隐藏,不用逐个控件设置。

方案2:单个控件单独设置

要是只想针对某几个LayoutAnchorable生效,可以直接在XAML里给目标控件的标题栏配置属性:

<avalonDock:LayoutAnchorable Title="我的可停靠面板">
    <avalonDock:LayoutAnchorable.TitleBar>
        <avalonDock:AnchorableTitleBar ContextMenuButtonVisibility="Collapsed" />
    </avalonDock:LayoutAnchorable.TitleBar>
    <!-- 这里放置你的面板内容 -->
</avalonDock:LayoutAnchorable>

方案3:代码后台处理(适合非MVVM场景)

如果你习惯用VB.NET代码后台控制,也可以在控件加载时找到标题栏并隐藏按钮:
首先给LayoutAnchorable绑定Loaded事件:

<avalonDock:LayoutAnchorable Title="代码控制的面板" Loaded="LayoutAnchorable_Loaded">
    <!-- 内容区域 -->
</avalonDock:LayoutAnchorable>

然后在VB.NET代码里实现事件处理逻辑:

Private Sub LayoutAnchorable_Loaded(sender As Object, e As RoutedEventArgs)
    Dim targetAnchorable = DirectCast(sender, LayoutAnchorable)
    Dim titleBar = targetAnchorable.Template.FindName("PART_TitleBar", targetAnchorable) As AnchorableTitleBar
    
    If titleBar IsNot Nothing Then
        titleBar.ContextMenuButtonVisibility = Visibility.Collapsed
    End If
End Sub

这几个方案都不需要重写复杂的控件模板,用起来很顺手,你可以根据自己的需求选一个就行~

内容的提问来源于stack exchange,提问作者Somanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:57:28