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 小时前
WPF(控件的继承树、内容控件、布局控件)
wpf
avi91113 天前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
吾与谁归in4 天前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
昂好的day4 天前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf
影寂ldy5 天前
WPF导航窗体+Page页面跳转 知识点整理
wpf
He BianGu5 天前
【WPF-Control教程】IOC 依赖注入
c#·wpf·wpf-control
He BianGu5 天前
【WPF-Control教程】H.Extensions.Behvaiors 开发文档
c#·wpf·wpf-control
He BianGu5 天前
【WPF-Control教程】H.Style 开发文档
c#·wpf·wpf-control
麻瓜code5 天前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
He BianGu5 天前
【WPF-Control教程】MVVM 二次开发文档
c#·wpf·wpf-control