【问题标题】:WPF: Adding ContexMenu to Dynamically Created TreeWPF:将 ContexMenu 添加到动态创建的树
【发布时间】:2010-12-27 23:07:21
【问题描述】:

大家好,我正在尝试将 ContexMenu 添加到我的动态生成树中。

下面是我生成树的代码。

我需要为 :

添加 ContexMenu

新: 编辑: 删除

在 MouseClick 我应该能够执行单击相应按钮的相同操作。

任何机构都可以帮助完成代码吗?

XML:CODE

<Window x:Class="NewTree_DynamicNode.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Loaded="TestsTreeViewPageFunction_Loaded">
    <Grid>
        <TreeView Name="treeFileSystem"  >
             <TreeViewItem Header="Suite"  Name="MYTree" Tag="hi"  IsExpanded="True">
               <TreeViewItem    Name="treeFileSystem1" />                              
            </TreeViewItem>
        </TreeView>
        <TextBox Name="textBox1" Height="23" HorizontalAlignment="Left" Margin="121,150,0,0"  VerticalAlignment="Top" Width="120" />
        <Button Content="New" Height="23" HorizontalAlignment="Left" Margin="12,121,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="New_Click" />
        <Button Content="Edit" Height="23" HorizontalAlignment="Left" Margin="12,150,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="Edit_Click"/>
        <Button Content="Copy" Height="23" HorizontalAlignment="Left" Margin="12,179,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="Copy_Click"/>
    </Grid>
</Window>

C# 代码:

 private void TestsTreeViewPageFunction_Loaded(object sender, 
 RoutedEventArgs e)
        {

            this.MYTree.Items.Clear();

            for (int j = 1; j < 4; j++)
            {
                TreeViewItem Case = new TreeViewItem();
                Case.Header = "Case "+j.ToString();
                Case.IsExpanded = true;

                Case.Items.Add(Trythis());

                this.MYTree.Items.Add(Case);
            }

        }


        private TreeViewItem Trythis()
        {
            TreeViewItem Step = new TreeViewItem();

          for (int i = 0; i < 5; i++)
          { 
            Step.Header = "Steps " + i.ToString();
          }  
            return Step;          
        }



        private void New_Click(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "New Button Clicked";
        }

        private void Edit_Click(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "Edit Button Clicked";
        }

        private void Copy_Click(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "Copy Button Clicked";
        }

编辑:

我正在寻找一种解决方案,我应该能够根据那里的 Header 信息将 ContexMenu 添加或限制到 TreeItem。

【问题讨论】:

  • 你的代码真的很乱。不要使用button1 名称。

标签: c# wpf treeview


【解决方案1】:

您可以使用样式设置常用的 ContextMenu 属性:

<TreeViewItem Header="Suite" Name="MYTree" Tag="hi" IsExpanded="True">
    <TreeViewItem.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="New" />
                        <MenuItem Header="Edit" />
                        <MenuItem Header="Delete" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeViewItem.Resources>
    <TreeViewItem x:Name="treeFileSystem1" />
</TreeViewItem>

或者您可以在代码中添加上下文菜单:this.MYTree.Items.Add(Case); 行之前 您可以添加如下内容:

var menu = new ContextMenu();
menu.Children.Add(new MenuItem{Header = "Save"});
menu.Children.Add(new MenuItem{Header = "Load"});
Case.ContextMenu = menu;

【讨论】:

  • 非常感谢您的回复....... 是否有任何解决方案可以在运行时添加 ContexMenu。因此,基于一些计算,假设基于 Tree Header,我将能够决定使用哪个 ContedMenu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多