本文参考自如下链接:
WPF的ContextMenu的绑定方式
WPF中listview控件绑定右键菜单命令
ContextMenu为何不能正常绑定
在WPF中,ContextMenu和ToolTip一样都是弹出层,与VisualTree已经分离了,只不过ToolTip在WPF中有进行特殊处理,所以可以正常绑定。
我的代码,在ListView中右键菜单中添加清空按钮,实现清空功能:
<ListView x:Name="LbLog" ItemsSource="{Binding LbLogItems}"> <ListView.ContextMenu> <ContextMenu> <MenuItem Command="{Binding AssembledMsgListViewItemCopyCommand}" CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}" FontFamily="微软雅黑" FontWeight="UltraBold" Header="复制报文" /> <MenuItem Command="{Binding LogAssembledMsgClearCommand}" FontFamily="微软雅黑" FontWeight="UltraBold" Header="清空列表" /> </ContextMenu> </ListView.ContextMenu> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="BorderThickness" Value="0" /> <Setter Property="Margin" Value="0,5,0,0" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListViewItem"> <Border x:Name="border" Background="White" BorderBrush="#D291BC" BorderThickness="0" CornerRadius="10"> <ContentPresenter /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="border" Property="BorderThickness" Value="3" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListView.ItemContainerStyle> <ListView.ItemTemplate> <DataTemplate> <materialDesign:TransitioningContent OpeningEffect="{materialDesign:TransitionEffect Kind=SlideInFromRight}"> <Grid Height="35"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Margin="5,0,0,0" VerticalAlignment="Center" FontSize="16" FontWeight="UltraBold" Text="{Binding TimeStamp}" /> <materialDesign:PackIcon Grid.Column="1" Width="24" Height="24" Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" Foreground="{Binding ForeColor}" Kind="{Binding IconKind}" /> <TextBlock Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="UltraBold" Foreground="{Binding ForeColor}" Text="{Binding Type}" /> <TextBlock Grid.Column="3" Margin="5,0,5,0" VerticalAlignment="Center" FontSize="16" FontWeight="UltraBold" IsHitTestVisible="False" Text="{Binding Msg}" /> </Grid> </materialDesign:TransitioningContent> </DataTemplate> </ListView.ItemTemplate> </ListView>
下面一行代码是重点,可以将右键所选中的Item传递到ContextMenu中:
CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
标签:
WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)