Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions components/dropdownbutton/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,4 @@ The DropDownButton exposes a `FocusAsync` method that allows you to focus it pro
* [DropDownButton API](slug:Telerik.Blazor.Components.TelerikDropDownButton)
* [Live Demo: DropDownButton](https://demos.telerik.com/blazor-ui/dropdownbutton/overview)
* [Live Demo: DropDownButton Items](https://demos.telerik.com/blazor-ui/dropdownbutton/items)
* [Hierarchical DropDownButton Items](slug:dropdownbutton-kb-nested-item-hierarchy)
180 changes: 180 additions & 0 deletions knowledge-base/dropdownbutton-nested-item-hierarchjy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
---
title: Nest DropDownButton Items in Hierarchy
description: Learn how to nest dropdown buttons and use multiple sets of hierarchical dropdown items.
type: how-to
page_title: How to Nest DropDownButton Items in Hierarchy
slug: t
tags: blazor, dropdownbutton, hierarchy
ticketid: 1628170, 1682574
res_type: kb
---

## Environment

<table>
<tbody>
<tr>
<td>Product</td>
<td>DropDownButton for Blazor</td>
</tr>
</tbody>
</table>

## Description

This KB answers the following questions:

* How to nest dropdown buttons and use multiple sets of dropdown items in hierarchy?
* How to allow nested layers of hierarchical items in the Telerik DropDownButton for Blazor? The UI should look like a multi-level Menu or ContextMenu.

## Solution

Here are two ways to achieve hierarchy UI with a DropDownButton user interface.

* [Indent the DropDownButton items with some empty space](#indent-dropdown-items)
* [Use a Menu component and style it to look like a DropDownButton](#use-menu-component)

Both examples below use [Telerik CSS theme variables](https://www.telerik.com/design-system/docs/themes/kendo-themes/default/theme-variables/) to avoid the need to hard-code custom style values.

### Indent Dropdown Items

1. Show parent-child relationships between the DropDownButton items by using empty space before each item text.
1. (optional) [Add separators between groups of DropDownButton items](slug:dropdownbutton-kb-add-separator-between-items).

>caption Apply padding to DropDownButton items to convey hierarchy

````RAZOR
<TelerikDropDownButton>
<DropDownButtonContent>DropDownButton</DropDownButtonContent>
<DropDownButtonItems>
<DropDownButtonItem>Level 1 Child 1</DropDownButtonItem>
<DropDownButtonItem>Level 1 Child 2</DropDownButtonItem>
<DropDownButtonItem><span class="pad"></span>Level 2 Child 1</DropDownButtonItem>
<DropDownButtonItem><span class="pad"></span>Level 2 Child 3</DropDownButtonItem>
<DropDownButtonItem><span class="pad"></span><span class="pad"></span>Level 3 Child 1</DropDownButtonItem>
<DropDownButtonItem>Level 1 Child 3</DropDownButtonItem>
</DropDownButtonItems>
</TelerikDropDownButton>

<style>
.pad {
padding-left: var(--kendo-spacing-6);
}
</style>
````

### Use Menu Component

1. Render a Menu component with a single root item.
1. Define the item hierarchy with flat data or hierarchical data.
1. Implement a [Menu `OnClick` event handler](slug:components/menu/events#onclick).

>caption Style a Menu to look like a DropDownButton

````RAZOR
<TelerikMenu Data="@MenuItems"
Class="menu-button"
TItem="@MenuItem"
OnClick="@OnMenuItemClick">
</TelerikMenu>

<style>
.menu-button {
display: inline-block;
color: var(--kendo-color-on-base);
}

.menu-button > .k-item {
background: var(--kendo-color-base);
color: var(--kendo-color-on-base);
border: 1px solid var(--kendo-color-border);
border-radius: var(--kendo-border-radius-md);
}

.menu-button > .k-item:hover {
background: var(--kendo-color-base-hover);
}

.menu-button > .k-item.k-menu-item:active {
color: var(--kendo-color-on-base);
background: var(--kendo-color-base-active);
}

.menu-button > .k-item.k-menu-item:focus {
box-shadow: 0 0 0 2px rgba(0,0,0,.08);
}

/* optional: hide the expand arrow */
.menu-button > .k-item .k-menu-expand-arrow {
/*display: none;*/
}

.menu-button > .k-item > .k-menu-link {
padding: var(--kendo-spacing-1) var(--kendo-spacing-2);
}
</style>

@code {
private void OnMenuItemClick(MenuItem clickedItem)
{
Console.WriteLine($"The user clicked on {clickedItem.Text}");
}

private List<MenuItem> MenuItems { get; set; } = new List<MenuItem>()
{
new MenuItem()
{
Id = 1,
Text = "Menu as DropDownButton"
},
new MenuItem()
{
Id = 2,
ParentId = 1,
Text = "Level 1 Child 1"
},
new MenuItem()
{
Id = 3,
ParentId = 1,
Text = "Level 1 Child 2"
},
new MenuItem()
{
Id = 4,
ParentId = 3,
Text = "Level 2 Child 1"
},
new MenuItem()
{
Id = 5,
ParentId = 3,
Text = "Level 2 Child 2"
},
new MenuItem()
{
Id = 6,
ParentId = 5,
Text = "Level 3 Child 1"
},
new MenuItem()
{
Id = 7,
ParentId = 1,
Text = "Level 1 Child 3"
}
};

public class MenuItem
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Text { get; set; } = string.Empty;
}
}
````

## See Also

* [DropDownButton Overview](slug:dropdownbutton-overview)
* [Menu Overview](slug:menu-overview)
Loading