如何移除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
相关产品推荐
相关产品推荐

