WPF TreeView 条目右键命令 ContextMenu按钮绑定命令

XML 复制代码
<telerik:RadTreeView
    x:Name="myTree"
    Grid.Row="1"
    Grid.Column="0"
    ItemsSource="{Binding MyAction.ActionList}"
    SelectedItem="{Binding SelectedActionNode, Mode=TwoWay}">
    <telerik:RadTreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding SonActionNodeList}">
            <StackPanel Orientation="Horizontal" Tag="{Binding DataContext, ElementName=root}">
                <Image
                    Width="16"
                    Height="16"
                    RenderOptions.BitmapScalingMode="HighQuality"
                    RenderOptions.EdgeMode="Aliased"
                    SnapsToDevicePixels="True"
                    Source="{Binding ActionNodeType, Converter={StaticResource ImageSourceConverter}}" />
                <TextBlock
                    Margin="5,0"
                    HorizontalAlignment="Stretch"
                    Text="{Binding Name}" />
                <Border
                    Width="10"
                    Height="10"
                    Background="{Binding ExecutionState, Converter={StaticResource SingleFlowExecutionStateToBrushColor}}" />
                <Border />
                <Border
                    Width="10"
                    Height="10"
                    Visibility="{Binding IsSkip, Converter={StaticResource Bool2VisibilityConverter}}">
                    <Path
                        Data="{StaticResource SkipGeometry}"
                        Fill="OrangeRed"
                        Stretch="Uniform" />
                </Border>


                <StackPanel.ContextMenu>
                    <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">

                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="删除树节点"
                            Header="删除">
                            <MenuItem.Icon>
                                <Path
                                    Width="16"
                                    Height="16"
                                    Data="{StaticResource DeleteGeometry2}"
                                    Fill="Red"
                                    Stretch="Uniform" />
                            </MenuItem.Icon>
                        </MenuItem>
                        <Separator />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="添加子项"
                            Header="添加子项"
                            IsEnabled="{Binding SelectedActionNode.ActionNodeType, Converter={StaticResource ActionTypeToBool}}">
                            <MenuItem
                                Command="{Binding ActionControlCommand}"
                                CommandParameter="添加同步序列"
                                Header="同步序列" />
                            <MenuItem
                                Command="{Binding ActionControlCommand}"
                                CommandParameter="添加异步序列"
                                Header="异步序列">
                                <MenuItem.Icon>
                                    <Path
                                        Width="16"
                                        Height="16"
                                        Data="{StaticResource MultiThreadGeometry}"
                                        Fill="LightSeaGreen"
                                        Stretch="Uniform" />
                                </MenuItem.Icon>
                            </MenuItem>
                            <MenuItem
                                Command="{Binding ActionControlCommand}"
                                CommandParameter="添加单步"
                                Header="单步动作" />
                        </MenuItem>
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="上方插入"
                            Header="上方插入" />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="下方插入"
                            Header="下方插入" />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="上移"
                            Header="上移" />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="下移"
                            Header="下移" />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="复制"
                            Header="复制">
                            <MenuItem.Icon>
                                <Path
                                    Width="16"
                                    Height="16"
                                    Data="{StaticResource CopyGeometry2}"
                                    Fill="LightSlateGray"
                                    Stretch="Uniform" />
                            </MenuItem.Icon>
                        </MenuItem>

                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="粘贴"
                            Header="粘贴" />
                        <MenuItem
                            Command="{Binding ActionControlCommand}"
                            CommandParameter="保存为常用"
                            Header="保存为常用" />

                    </ContextMenu>
                </StackPanel.ContextMenu>
            </StackPanel>


        </HierarchicalDataTemplate>
    </telerik:RadTreeView.ItemTemplate>
</telerik:RadTreeView>

要点:

条目模板上:

<StackPanel Orientation="Horizontal" Tag="{Binding DataContext, ElementName=root}">

条目右键菜单上:

<ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">

把主ViewModel 通过Tag传递到 右键菜单可以访问到的地方。

相关推荐
lindexi3 小时前
WPF 笔迹延迟优化从硬件到软件的全链路分析
wpf
weixin_727535621 天前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
liuxiaowei31 天前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf
贺国亚2 天前
模型训练-分布式与GPU调度
分布式·wpf
不羁的木木2 天前
HarmonyOS技术精讲-Connectivity Kit:实战——多屏协同与文件快传应用
华为·wpf·harmonyos
某不知名網友3 天前
C++ 从零实现负载均衡式在线 OJ 判题系统|分布式沙箱判题实战
wpf
fogota3 天前
【AI】C# .NET8 WPF 第三方DLL引用配置(编译不丢失、不自动删除)
c#·.net·wpf·dll
不羁的木木3 天前
HarmonyOS技术精讲-Connectivity Kit(短距通信服务):初识统一短距通信框架
华为·wpf·harmonyos
慧都小妮子5 天前
SciChart WPF v9.0 更新详解:矢量场图表、堆叠箱线图与 MVVM 轴同步来了
c#·.net·wpf·数据可视化·图表控件·图表
He BianGu5 天前
【笔记】WPF中 Brush 的类型、继承关系、使用方式和注意事项
笔记·wpf