Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中创建具有树结构的上下文菜单#_C#_Wpf_Contextmenu_Menuitem_Hierarchical - Fatal编程技术网

C# 在c中创建具有树结构的上下文菜单#

C# 在c中创建具有树结构的上下文菜单#,c#,wpf,contextmenu,menuitem,hierarchical,C#,Wpf,Contextmenu,Menuitem,Hierarchical,我正在努力用C#(WPF)创建一个具有层次结构的上下文菜单。源是一个简单的列表,其中包含以下内容: \\root\folderA\programA.exe \\root\folderA\programB.exe \\root\folderA\programC.exe \\root\folderB\programA.exe \\root\folderB\programE.exe \\root\programF.exe \\root\programG.exe \\root\programH.exe

我正在努力用C#(WPF)创建一个具有层次结构的上下文菜单。源是一个简单的列表,其中包含以下内容:

\\root\folderA\programA.exe
\\root\folderA\programB.exe
\\root\folderA\programC.exe
\\root\folderB\programA.exe
\\root\folderB\programE.exe
\\root\programF.exe
\\root\programG.exe
\\root\programH.exe
基本上,我必须创建一个电子菜单,如下所示:

-root 
      -folderA 
               -programA.exe
               -programB.exe
               -programC.exe

我对WPF几乎没有经验,我知道这可以结合ContextMenu和MenuItem来完成。有什么提示吗?

我假设您正在为每个TreeView项目创建视图模型?如果是这样,那么只需为每个视图模型类型分配不同的
资源,然后每个模板就可以拥有自己的
。例如,这来自我的一个项目,我在其中制作了一个类似TreeView的SQL对象浏览器:

        <TreeView.Resources>
            <!-- Brushes for the selected item -->
            <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFDCEBFC" Offset="0"/>
                <GradientStop Color="#FFC1DBFC" Offset="1"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFF8F8F8" Offset="0"/>
                <GradientStop Color="#FFE5E5E5" Offset="1"/>
            </LinearGradientBrush>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
            <HierarchicalDataTemplate DataType="{x:Type vm:ServerViewModel}" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal" Margin="2,1,5,2">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Refresh">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/RefreshIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <Grid Margin="0,0,3,0">
                        <Image Name="icon" Source="/Content/ServerExplorer/ServerIcon.png" Height="16" Width="16"></Image>
                    </Grid>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <HierarchicalDataTemplate DataType="{x:Type vm:DatabaseViewModel}" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal" Margin="2,1,5,2">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Refresh">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/RefreshIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <Grid Margin="0,0,3,0">
                        <Image Name="icon" Source="/Content/ServerExplorer/DatabaseIcon.png" Height="16" Width="16"></Image>
                    </Grid>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <DataTemplate DataType="{x:Type vm:TableViewModel}">
                <StackPanel Orientation="Horizontal" Margin="2,1,5,2">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Script Records" Click="ScriptRecords_Click">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/ScriptIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                            <MenuItem Header="Script Table">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/ScriptIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                            <MenuItem Header="Create Replication">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/ReplicationIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <Grid Margin="0,0,3,0">
                        <Image Name="icon" Source="/Content/ServerExplorer/TableIcon.png" Height="16" Width="16"></Image>
                    </Grid>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>

            <DataTemplate DataType="{x:Type vm:StoredProcedureViewModel}">
                <StackPanel Orientation="Horizontal" Margin="2,1,5,2">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Script Procedure">
                                <MenuItem.Icon>
                                    <Image Source="/Content/ServerExplorer/ScriptIcon.png"></Image>
                                </MenuItem.Icon>
                            </MenuItem>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <Grid Margin="0,0,3,0">
                        <Image Name="icon" Source="/Content/ServerExplorer/StoredProcedureIcon.png" Height="16" Width="16"></Image>
                    </Grid>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
       </TreeView.Resources>


我为每个树视图项创建了不同的视图模型。在您的例子中,可能会有一个RootViewModel、FolderViewModel,然后是FileViewModel。每个模板都有自己的模板,然后您可以根据需要设置每个模板的样式

谢谢!但是我忘了告诉你我必须在运行时创建菜单。正确。您只需在运行时将TreeView与对象进行数据绑定。AKA
myTreeView.DataContext=myListViewModels