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

相关推荐
上海物联网1 天前
Prism Regions-自定义区域适配器实现开发者将任意 WPF 控件转换为可动态加载视图的区域容器
面试·wpf
Aevget2 天前
DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(四)?
wpf·界面控件·devexpress·ui开发·.net 10
棉晗榜2 天前
wpf DataGrid控制列是否显示,DataGrid列不会触发Visibility的转换器
wpf
超级种码2 天前
Redis:Redis高可用——副本、哨兵和集群
数据库·redis·wpf
棉晗榜2 天前
wpf给Border添加闪烁边框
wpf
Derrick_itRose2 天前
DevExpress笔记WPF(2)Data Editors and Controls(基础编辑器)
笔记·编辑器·wpf
He BianGu2 天前
【笔记】WPF的Binding中AsyncState的使用方式
笔记·wpf
曹天骄3 天前
Cloudflare KV 使用教程(基于 Wrangler 项目)
wpf
摘星编程3 天前
Flutter for OpenHarmony 实战:Dialog 对话框详解
flutter·wpf
ou.cs3 天前
WPF TreeView 自动展开所有节点:附加行为(Attached Behavior)保姆级实现教程
c#·.net·wpf