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传递到 右键菜单可以访问到的地方。

相关推荐
一念春风4 小时前
Qwen2.5 (AI模型 PC搭建)
人工智能·ai·c#·wpf·模型
互联网散修6 小时前
鸿蒙跨设备实时绘图同步:从零到一实现分布式画板
分布式·wpf·harmonyos
晓纪同学1 天前
WPF-09 命令系统
wpf
晓纪同学1 天前
WPF-10资源系统
wpf
七夜zippoe1 天前
DolphinDB集群部署:从单机到分布式
分布式·wpf·单机·dolphindb·分集群
波波0072 天前
写出稳定C#系统的关键:不可变性思想解析
开发语言·c#·wpf
bugcome_com2 天前
从 MVVMLight 到 CommunityToolkit.Mvvm:MVVM 框架的现代化演进与全面对比
wpf
笺上知微3 天前
基于HelixToolkit.SharpDX 渲染3D模型
wpf
晓纪同学4 天前
WPF-03 第一个WPF程序
大数据·hadoop·wpf
光电大美美-见合八方中国芯4 天前
用于无色波分复用光网络的 10.7 Gb/s 反射式电吸收调制器与半导体光放大器单片集成
网络·后端·ai·云计算·wpf·信息与通信·模块测试