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

相关推荐
拾七片晚星16 小时前
MateChat工作流引擎实战:复杂任务自动化编排与异常处理
wpf·devui·matechat
Aevget17 小时前
界面控件开发包DevExpress v25.1.7更新上线——修复一些小bug
c#·wpf·winform·devexpress·ui开发·用户界面
_oP_i18 小时前
winform与wpf的对比
wpf
她说彩礼65万18 小时前
WPF Converter转换器
wpf
她说彩礼65万19 小时前
C# Thread和Task的区别
wpf
张人玉21 小时前
C#编写西门子S7PLC通信的相关知识点
microsoft·c#·wpf·plc·西门子s7通信
乐科1 天前
WPF定时器
stm32·单片机·wpf
wuty0072 天前
WPF 调用 Win32的SetWindowDisplayAffinity 函数 实现捕获屏幕时,过滤指定的窗口
wpf·setwindowdisplayaffinity·过滤窗口·wgc·截屏过滤窗口
TracyCoder1232 天前
RocketMQ技术原理简单解析:从架构到核心流程
架构·wpf·rocketmq
烽火聊员2 天前
SSLSocket 服务器端WPF C#测试代码
开发语言·c#·wpf·ssl