treeviewitem通过eventsetter的previewmouserightbuttondown事件弹出菜单,选择菜单中的添加按钮添加二级treeviewitem

2024-05-30by@745350574-DjYGR&@ChatGPT.Model: gpt-3.5
745350574-DjYGR

treeviewitem通过eventsetter的previewmouserightbuttondown事件弹出菜单,选择菜单中的添加按钮添加二级treeviewitem

Avatar
Avatar
<TreeViewItem Header="Parent Item">
    <TreeViewItem Header="Child Item 1"/>
    <TreeViewItem Header="Child Item 2"/>
    <TreeViewItem Header="Child Item 3"/>
    <TreeViewItem Header="Child Item 4">
        <TreeViewItem Header="Subchild Item 1"/>
        <TreeViewItem Header="Subchild Item 2"/>
        <TreeViewItem Header="Subchild Item 3"/>
    </TreeViewItem>
</TreeViewItem>

<ContextMenu x:Key="TreeViewItemContextMenu">
    <MenuItem Header="Add Child Item" Click="AddChildItem_Click"/>
</ContextMenu>
private void AddChildItem_Click(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = (MenuItem)sender;
    TreeViewItem parentItem = (TreeViewItem)menuItem.DataContext;
    
    TreeViewItem newChildItem = new TreeViewItem();
    newChildItem.Header = "New Child Item";
    
    parentItem.Items.Add(newChildItem);
}
<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <EventSetter Event="PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem treeViewItem = (TreeViewItem)sender;
    ContextMenu contextMenu = (ContextMenu)Resources["TreeViewItemContextMenu"];
    contextMenu.DataContext = treeViewItem;
    contextMenu.IsOpen = true;
}
745350574-DjYGR

treeviewitem通过eventsetter的previewmouserightbuttondown事件弹出菜单,菜单中包含添加、删除,点击添加按钮添加二级treeviewitem

Avatar
Avatar
<TreeViewItem Header="Parent Item">
    <TreeViewItem Header="Child Item 1"/>
    <TreeViewItem Header="Child Item 2"/>
    <TreeViewItem Header="Child Item 3"/>
    <TreeViewItem Header="Child Item 4">
        <TreeViewItem Header="Subchild Item 1"/>
        <TreeViewItem Header="Subchild Item 2"/>
        <TreeViewItem Header="Subchild Item 3"/>
    </TreeViewItem>
</TreeViewItem>

<ContextMenu x:Key="TreeViewItemContextMenu">
    <MenuItem Header="Add Child Item" Click="AddChildItem_Click"/>
    <MenuItem Header="Delete Item" Click="DeleteItem_Click"/>
</ContextMenu>
private void AddChildItem_Click(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = (MenuItem)sender;
    TreeViewItem parentItem = (TreeViewItem)menuItem.DataContext;
    
    TreeViewItem newChildItem = new TreeViewItem();
    newChildItem.Header = "New Child Item";
    
    parentItem.Items.Add(newChildItem);
}

private void DeleteItem_Click(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = (MenuItem)sender;
    TreeViewItem itemToDelete = (TreeViewItem)menuItem.DataContext;
    TreeViewItem parentItem = (TreeViewItem)itemToDelete.Parent;

    parentItem.Items.Remove(itemToDelete);
}
<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <EventSetter Event="PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem treeViewItem = (TreeViewItem)sender;
    ContextMenu contextMenu = (ContextMenu)Resources["TreeViewItemContextMenu"];
    contextMenu.DataContext = treeViewItem;
    contextMenu.IsOpen = true;
}