WPF: добавление ContexMenu в динамически создаваемое дерево - PullRequest
1 голос
/ 27 декабря 2010

Привет всем, что я пытаюсь добавить 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 # CODE:

 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";
        }

РЕДАКТИРОВАТЬ:

Я ищу решение, где я мог бы добавить или ограничить ContexMenu для TreeItem на основе информации заголовка.

1 Ответ

3 голосов
/ 27 декабря 2010

Вы можете использовать стиль для установки общего свойства 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...