如何重写Xceed.Wpf.AvalonDock LayoutItem在Header右键菜单的关闭命令
定义资源:
<ResourceDictionary> <xcad:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" /> <ContextMenu x:Key="DocumentContextMenu"> <MenuItem Command="{Binding Path=Model.CloseCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="关闭" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem>
....
完整代码:

<xcad:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" /> <ContextMenu x:Key="DocumentContextMenu"> <MenuItem Command="{Binding Path=CloseCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="关闭" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=CloseAllButThisCommand}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="除此之外全部关闭" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=CloseAllCommand}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="全部关闭" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=FloatCommand}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="漂浮" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=DockAsDocumentCommand}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="停靠成标签式文档" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=NewHorizontalTabGroupCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.Icon> <Image Source="Images/HTabGroup.png" Stretch="Uniform" Width="14" /> </MenuItem.Icon> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="新建水平标签分组" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=NewVerticalTabGroupCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.Icon> <Image Source="Images/VTabGroup.png" Stretch="Uniform" Width="14" /> </MenuItem.Icon> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="新建垂直标签分组" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=MoveToNextTabGroupCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="移动到下一个标签组" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> <MenuItem Command="{Binding Path=MoveToPreviousTabGroupCommand}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <MenuItem.HeaderTemplate> <DataTemplate> <TextBlock Text="移动到上一个标签组" /> </DataTemplate> </MenuItem.HeaderTemplate> </MenuItem> </ContextMenu>
注意这里的Model.CloseCommand的Model其实是DockingManager的DocumentsSource集合中的一项,该项对应一个含有CloseCommand属性的类实例,这样写其实就相当于覆盖掉原有CloseCommand
<xcad:DockingManager x:Name="dockingManager" AllowMixedOrientation="True" DocumentContextMenu="{StaticResource DocumentContextMenu}" BorderBrush="Black" FontFamily="Microsoft YaHei" DocumentClosing="dockingManager_OnDocumentClosing" DocumentsSource="{Binding Path=PanelsModel.Panels}" BorderThickness="1">
如DocumentContextMenu="{StaticResource DocumentContextMenu}"所示,直接指定DocumentContextMenu就ok了。
写得有点乱,权当是个简记。
标签:
AvalonDock
, WPF
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
2018-04-11 Choosing web framework: ASP.NET MVC vs Django Python vs Ruby on Rails(转载)