MenuButton
A menu button is a menu item that displays a word or phrase that the user can click to initiate an operation.
Notes
The BitMenuButton is a Multi-API component
which can accept the list of Items in 3 different ways:
1. The BitMenuButtonItem class
2. A Custom Generic class
3. The BitMenuButtonOption component
Usage
Basic
<BitMenuButton Text="MenuButton" Items="basicItems" />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; }
Split
Explore the Split behavior of BitMenuButton, demonstrating buttons divided into two sections. One section triggers an action on click, while the other section opens a callout to reveal additional options.
<BitMenuButton Text="Split" Items="basicItems" Split />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; }
Variant
The MenuButton offers three variants: Fill (default), Outline, and Text.
<BitMenuButton Text="Fill" Items="basicItems" Variant="BitVariant.Fill" /> <BitMenuButton Text="Outline" Items="basicItems" Variant="BitVariant.Outline" /> <BitMenuButton Text="Text" Items="basicItems" Variant="BitVariant.Text" /> <BitMenuButton Text="Fill" Items="basicItems" Variant="BitVariant.Fill" IsEnabled="false" /> <BitMenuButton Text="Outline" Items="basicItems" Variant="BitVariant.Outline" IsEnabled="false" /> <BitMenuButton Text="Text" Items="basicItems" Variant="BitVariant.Text" IsEnabled="false" /> <BitMenuButton Text="Fill" Items="basicItems" Variant="BitVariant.Fill" Split /> <BitMenuButton Text="Outline" Items="basicItems" Variant="BitVariant.Outline" Split /> <BitMenuButton Text="Text" Items="basicItems" Variant="BitVariant.Text" Split /> <BitMenuButton Text="Fill" Items="basicItems" Variant="BitVariant.Fill" IsEnabled="false" Split /> <BitMenuButton Text="Outline" Items="basicItems" Variant="BitVariant.Outline" IsEnabled="false" Split /> <BitMenuButton Text="Text" Items="basicItems" Variant="BitVariant.Text" IsEnabled="false" Split />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ];; }
Color
Offering a range of specialized color variants with Primary being the default, providing visual cues for specific actions or states within your application.
<BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Primary" /> <BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Primary" /> <BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Primary" /> <BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Primary" Split /> <BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Primary" Split /> <BitMenuButton Text="Primary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Primary" Split /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Secondary" /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Secondary" /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Secondary" /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Secondary" Split /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Secondary" Split /> <BitMenuButton Text="Secondary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Secondary" Split /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Tertiary" /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Tertiary" /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Tertiary" /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Tertiary" Split /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Tertiary" Split /> <BitMenuButton Text="Tertiary" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Tertiary" Split /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Info" /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Info" /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Info" /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Info" Split /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Info" Split /> <BitMenuButton Text="Info" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Info" Split /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Success" /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Success" /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Success" /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Success" Split /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Success" Split /> <BitMenuButton Text="Success" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Success" Split /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Warning" /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Warning" /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Warning" /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Warning" Split /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Warning" Split /> <BitMenuButton Text="Warning" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Warning" Split /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SevereWarning" /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SevereWarning" /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SevereWarning" /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SevereWarning" Split /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SevereWarning" Split /> <BitMenuButton Text="SevereWarning" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SevereWarning" Split /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Error" /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Error" /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Error" /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.Error" Split /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.Error" Split /> <BitMenuButton Text="Error" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.Error" Split /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryBackground" /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryBackground" /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryBackground" /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryBackground" Split /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryBackground" Split /> <BitMenuButton Text="PrimaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryBackground" Split /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryBackground" /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryBackground" /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryBackground" /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryBackground" Split /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryBackground" Split /> <BitMenuButton Text="SecondaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryBackground" Split /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryBackground" /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryBackground" /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryBackground" /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryBackground" Split /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryBackground" Split /> <BitMenuButton Text="TertiaryBackground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryBackground" Split /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryForeground" /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryForeground" /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryForeground" /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryForeground" Split /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryForeground" Split /> <BitMenuButton Text="PrimaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryForeground" Split /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryForeground" /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryForeground" /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryForeground" /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryForeground" Split /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryForeground" Split /> <BitMenuButton Text="SecondaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryForeground" Split /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryForeground" /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryForeground" /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryForeground" /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryForeground" Split /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryForeground" Split /> <BitMenuButton Text="TertiaryForeground" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryForeground" Split /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryBorder" /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryBorder" /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryBorder" /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.PrimaryBorder" Split /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.PrimaryBorder" Split /> <BitMenuButton Text="PrimaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.PrimaryBorder" Split /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryBorder" /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryBorder" /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryBorder" /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.SecondaryBorder" Split /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.SecondaryBorder" Split /> <BitMenuButton Text="SecondaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.SecondaryBorder" Split /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryBorder" /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryBorder" /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryBorder" /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Fill" Color="BitColor.TertiaryBorder" Split /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Outline" Color="BitColor.TertiaryBorder" Split /> <BitMenuButton Text="TertiaryBorder" Items="basicItems" Variant="BitVariant.Text" Color="BitColor.TertiaryBorder" Split />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; }
Size
Varying sizes for menu buttons tailored to meet diverse design needs, ensuring flexibility and visual hierarchy within your interface.
<BitMenuButton Text="Small" Items="basicItems" Variant="BitVariant.Fill" Size="BitSize.Small" /> <BitMenuButton Text="Small" Items="basicItems" Variant="BitVariant.Outline" Size="BitSize.Small" /> <BitMenuButton Text="Small" Items="basicItems" Variant="BitVariant.Text" Size="BitSize.Small" /> <BitMenuButton Text="Medium" Items="basicItems" Variant="BitVariant.Fill" Size="BitSize.Medium" /> <BitMenuButton Text="Medium" Items="basicItems" Variant="BitVariant.Outline" Size="BitSize.Medium" /> <BitMenuButton Text="Medium" Items="basicItems" Variant="BitVariant.Text" Size="BitSize.Medium" /> <BitMenuButton Text="Large" Items="basicItems" Variant="BitVariant.Fill" Size="BitSize.Large" /> <BitMenuButton Text="Large" Items="basicItems" Variant="BitVariant.Outline" Size="BitSize.Large" /> <BitMenuButton Text="Large" Items="basicItems" Variant="BitVariant.Text" Size="BitSize.Large" />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; }
Sticky
Experience the Sticky functionality of BitMenuButton, showcasing a button that remains sticky after an item selection. The button displays the selected item and retains its state for continuous user interaction.
<BitMenuButton Items="basicItems" Variant="BitVariant.Fill" Sticky /> <BitMenuButton Items="basicItems" Variant="BitVariant.Fill" Split Sticky /> <BitMenuButton Items="basicItems" Variant="BitVariant.Outline" Sticky /> <BitMenuButton Items="basicItems" Variant="BitVariant.Outline" Split Sticky /> <BitMenuButton Items="basicItems" Variant="BitVariant.Text" Sticky /> <BitMenuButton Items="basicItems" Variant="BitVariant.Text" Split Sticky />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; }
Icons
Present BitMenuButton instances with customized icons, enriching the visual options for representing menu buttons.
<BitMenuButton Text="IconName" Items="basicItemsIcon" IconName="@BitIconName.Edit" /> <BitMenuButton Text="ChevronDownIcon" Items="basicItemsIcon" ChevronDownIcon="@BitIconName.DoubleChevronDown" Split />@code { private List<BitMenuButtonItem> basicItemsIcon = [ new() { Text = "Item A", Key = "A", IconName = BitIconName.Emoji }, new() { Text = "Item B", Key = "B", IconName = BitIconName.Emoji, IsEnabled = false }, new() { Text = "Item C", Key = "C", IconName = BitIconName.Emoji2 } ]; }
Style & Class
Empower customization by overriding default styles and classes, allowing tailored design modifications to suit specific UI requirements.
Component's Style & Class:
Item's Style & Class:
Styles & Classes:
<style> .custom-class { margin-inline: 1rem; border-radius: 1rem; border-color: tomato; border-width: 0.25rem; } .custom-class > button { color: tomato; border-color: tomato; background: transparent; } .custom-class > button:hover { background-color: #ff63473b; } .custom-item { color: peachpuff; background-color: tomato; } .custom-button { color: deepskyblue; background: transparent; } .custom-opened .custom-button { color: cornflowerblue; } .custom-callout { border-radius: 1rem; border-color: lightgray; backdrop-filter: blur(20px); background-color: transparent; box-shadow: darkgray 0 0 0.5rem; } .custom-item-button { border-bottom: 1px solid gray; } .custom-item-button:hover { background-color: rgba(255, 255, 255, 0.2); } .custom-callout li:last-child .custom-item-button { border-bottom: none; } </style> <BitMenuButton Text="Styled Button" Items="basicItems" Style="border-radius: 1rem; margin: 1rem; box-shadow: aqua 0 0 1rem; overflow: hidden;" /> <BitMenuButton Text="Classed Button" Items="basicItems" Class="custom-class" Variant="BitVariant.Outline" /> <BitMenuButton Text="Item Styled & Classed Button" Items="itemStyleClassItems" Variant="BitVariant.Text" /> <BitMenuButton Text="Classes" Items="basicItems" IconName="@BitIconName.FormatPainter" Variant="BitVariant.Text" Classes="@(new() { OperatorButton = "custom-button", Opened = "custom-opened", Callout = "custom-callout", ItemButton = "custom-item-button" })" /> <BitMenuButton Text="Styles" Items="basicItems" IconName="@BitIconName.Brush" Styles="@(new() { { Root = "--button-background: tomato; background: var(--button-background); border-color: var(--button-background); border-radius: 0.25rem;", Opened = "--button-background: orangered;", OperatorButton = "background: var(--button-background);", ItemButton = "background: lightcoral;", Callout = "border-radius: 0.25rem; box-shadow: lightgray 0 0 0.5rem;" })" />@code { private List<BitMenuButtonItem> basicItems = new() { new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } }; private static List<BitMenuButtonItem> itemStyleClassItems = [ new() { Text = "Item A (Default)", Key = "A", IconName = BitIconName.Emoji }, new() { Text = "Item C (Styled)", Key = "B", IconName = BitIconName.Emoji, Style = "color: tomato; border-color: brown; background-color: peachpuff;" }, new() { Text = "Item B (Classed)", Key = "C", IconName = BitIconName.Emoji2, Class = "custom-item" } ]; }
Templates
Explore BitMenuButton's customization capabilities.
Note that if Sticky set to true, HeaderTemplate and Text will be ignored.
HeaderTemplate
ItemTemplate
Item's template
<style> .item-template-box { display: flex; width: 100%; } </style> <BitMenuButton Items="basicItems"> <HeaderTemplate> <div style="font-weight: bold; color: #d13438;"> Custom Header! </div> </HeaderTemplate> </BitMenuButton> <BitMenuButton Text="Items" Items="itemTemplateItems" Split> <ItemTemplate Context="item"> <div class="item-template-box"> <span style="color:brown">@item.Text (@item.Key)</span> </div> </ItemTemplate> </BitMenuButton> <BitMenuButton Text="Items" Items="itemTemplateItems2" />@code { private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; private List<BitMenuButtonItem> itemTemplateItems = [ new() { Text = "Add", Key = "add-key", IconName = BitIconName.Add }, new() { Text = "Edit", Key = "edit-key", IconName = BitIconName.Edit }, new() { Text = "Delete", Key = "delete-key", IconName = BitIconName.Delete } ]; private List<BitMenuButtonItem> itemTemplateItems2 = [ new() { Text = "Add", Key = "add-key", IconName = BitIconName.Add, Template = (item => @<div class="item-template-box" style="color:green">@item.Text (@item.Key)</div>) }, new () { Text = "Edit", Key = "edit-key", IconName = BitIconName.Edit, Template = (item => @<div class="item-template-box" style="color:yellow">@item.Text (@item.Key)</div>) }, new() { Text = "Delete", Key = "delete-key", IconName = BitIconName.Delete, Template = (item => @<div class="item-template-box" style="color:red">@item.Text (@item.Key)</div>) } ]; }
Events
Demonstrate BitMenuButton instances highlighting item click events, offering versatile interactions within the menu buttons.
Non-Sticky
Sticky
Changed item:
Clicked item:
<BitMenuButton Text="Items" Items="basicItems" OnChange="(BitMenuButtonItem item) => eventsChangedItem = item?.Key" OnClick="(BitMenuButtonItem item) => eventsClickedItem = item?.Key" /> <BitMenuButton Split Text="Items" Items="basicItemsOnClick" OnChange="(BitMenuButtonItem item) => eventsChangedItem = item?.Key" OnClick="@((BitMenuButtonItem item) => eventsClickedItem = "Main button clicked")" /> <BitMenuButton Sticky Items="basicItems" OnChange="(BitMenuButtonItem item) => eventsChangedItem = item?.Key" OnClick="(BitMenuButtonItem item) => eventsClickedItem = item?.Key" /> <BitMenuButton Sticky Split Items="basicItemsOnClick" OnChange="(BitMenuButtonItem item) => eventsChangedItem = item?.Key" OnClick="(BitMenuButtonItem item) => eventsClickedItem = item?.Key" /> <div>Clicked item: @eventsClickedItem</div> <div>Changed item: @eventsChangedItem</div>@code { private string? eventsClickedItem; private string? eventsChangedItem; private List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; private List<BitMenuButtonItem> basicItemsOnClick = [ new() { Text = "Item A", Key = "A", IconName = BitIconName.Emoji }, new() { Text = "Item B", Key = "B", IconName = BitIconName.Emoji, IsEnabled = false }, new() { Text = "Item C", Key = "C", IconName = BitIconName.Emoji2 } ]; protected override void OnInitialized() { Action<BitMenuButtonItem> onClick = item => { eventsClickedItem = $"{item.Text}"; StateHasChanged(); }; basicItemsOnClick.ForEach(i => i.OnClick = onClick); } }
Binding
This example demonstrates different ways to handle item selection and changes within the component.
DefaultSelectedItem:
Two-way SelectedItem:
Item's IsSelected:
One-way IsOpen (closes after 2 seconds):
Two-way IsOpen:
<BitMenuButton Split Sticky Items="basicItems" DefaultSelectedItem="basicItems[1]" /> <BitMenuButton Sticky Items="basicItems" @bind-SelectedItem="twoWaySelectedItem" /> <BitChoiceGroup Horizontal Items="@choiceGroupItems" @bind-Value="@twoWaySelectedItem" /> <BitMenuButton Sticky Items="isSelectedItems" /> <BitMenuButton Sticky Items="basicItems" IsOpen="oneWayIsOpen" /> <BitCheckbox Label="One-way IsOpen" @bind-Value="oneWayIsOpen" OnChange="async _ => { await Task.Delay(2000); oneWayIsOpen = false; }" /> <BitMenuButton Sticky Items="basicItems" @bind-IsOpen="twoWayIsOpen" /> <BitCheckbox Label="Two-way IsOpen" @bind-Value="twoWayIsOpen" />@code { private BitMenuButtonItem twoWaySelectedItem = default!; private bool oneWayIsOpen; private bool twoWayIsOpen; private static List<BitMenuButtonItem> basicItems = [ new() { Text = "Item A", Key = "A" }, new() { Text = "Item B", Key = "B", IsEnabled = false }, new() { Text = "Item C", Key = "C" } ]; private static IEnumerable<BitChoiceGroupItem<BitMenuButtonItem>> choiceGroupItems = basicItems.Select(i => new BitChoiceGroupItem<BitMenuButtonItem>() { Id = i.Key, Text = i.Text, IsEnabled = i.IsEnabled, Value = i }); private List<BitMenuButtonItem> isSelectedItems = [ new() { Text = "Item A", Key = "A", IconName = BitIconName.Emoji }, new() { Text = "Item B", Key = "B", IconName = BitIconName.Emoji }, new() { Text = "Item C", Key = "C", IconName = BitIconName.Emoji2, IsSelected = true } ]; protected override void OnInitialized() { twoWaySelectedItem = basicItems[2]; } }
RTL
Use BitMenuButton in right-to-left (RTL).
<BitMenuButton Text="گزینه ها" Dir="BitDir.Rtl" Items="rtlItemsIcon" IconName="@BitIconName.Edit" /> <BitMenuButton Text="گزینه ها" Dir="BitDir.Rtl" Items="rtlItemsIcon" ChevronDownIcon="@BitIconName.DoubleChevronDown" Split />@code { private static List<BitMenuButtonItem> rtlItemsIcon = [ new() { Text = "گزینه الف", Key = "A", IconName = BitIconName.Emoji }, new() { Text = "گزینه ب", Key = "B", IconName = BitIconName.Emoji }, new() { Text = "گزینه ج", Key = "C", IconName = BitIconName.Emoji2 } ]; }
API
BitMenuButton parameters
Name |
Type |
Default value |
Description |
|---|---|---|---|
| AriaDescription | string? | null | Detailed description of the menu button for the benefit of screen readers. |
| AriaHidden | bool | false | If true, add an aria-hidden attribute instructing screen readers to ignore the menu button. |
| ButtonType | BitButtonType | null | The value of the type attribute of the menu button. |
| ChevronDownIcon | string? | null | The icon name of the chevron down part of the menu button. |
| ChildContent | RenderFragment? | null | The content of the menu button, that are BitMenuButtonOption components. |
| Classes | BitMenuButtonClassStyles? | null | Custom CSS classes for different parts of the menu button. |
| Color | BitColor? | null | The general color of the menu button. |
| DefaultSelectedItem | TItem? | null | Default value of the SelectedItem. |
| HeaderTemplate | RenderFragment? | null | The content inside the header of menu button can be customized. |
| IconName | string? | null | The icon to show inside the header of menu button. |
| IsOpen | bool | false | Determines the opening state of the callout. |
| Items | IEnumerable<TItem> | new List<TItem>() | List of items to show in the menu button. |
| ItemTemplate | RenderFragment<TItem>? | null | The custom template content to render each item. |
| NameSelectors | BitMenuButtonNameSelectors<TItem>? | null | Names and selectors of the custom input type properties. |
| OnClick | EventCallback<MouseEventArgs> | The callback is called when the menu button header is clicked. | |
| OnChange | EventCallback<TItem> | The callback that is called when the selected item has changed. | |
| Options | RenderFragment? | null | Alias of the ChildContent. |
| SelectedItem | TItem? | null | Determines the current selected item that acts as the header item. |
| Size | BitSize? | null | The size of the menu button. |
| Split | bool | false | If true, the menu button renders as a split button. |
| Sticky | bool | false | If true, the selected item is going to change the header item. |
| Styles | BitMenuButtonClassStyles? | null | Custom CSS styles for different parts of the menu button. |
| Text | string? | null | The text to show inside the header of menu button. |
| Variant | BitVariant? | null | The visual variant of the menu button. |
BitComponentBase parameters
Name |
Type |
Default value |
Description |
|---|---|---|---|
| AriaLabel | string? | null | The aria-label of the control for the benefit of screen readers. |
| Class | string? | null | Custom CSS class for the root element of the component. |
| Dir | BitDir? | null | Determines the component direction. |
| HtmlAttributes | Dictionary<string, object> | new Dictionary<string, object>() | Capture and render additional attributes in addition to the component's parameters. |
| Id | string? | null | Custom id attribute for the root element. if null the UniqueId will be used instead. |
| IsEnabled | bool | true | Whether or not the component is enabled. |
| Style | string? | null | Custom CSS style for the root element of the component. |
| Visibility | BitVisibility | BitVisibility.Visible | Whether the component is visible, hidden or collapsed. |
BitComponentBase public members
Name |
Type |
Default value |
Description |
|---|---|---|---|
| UniqueId | Guid | Guid.NewGuid() | The readonly unique id of the root element. it will be assigned to a new Guid at component instance construction. |
| RootElement | ElementReference | The ElementReference of the root element. |
BitMenuButtonClassStyles properties
Name |
Type |
Default value |
Description |
|---|---|---|---|
| Root | string? | null | Custom CSS classes/styles for the root element of the BitMenuButton. |
| Opened | string? | null | Custom CSS classes/styles for the opened callout state of the BitMenuButton. |
| OperatorButton | string? | null | Custom CSS classes/styles for operator button of the BitMenuButton. |
| OperatorButtonIcon | string? | null | Custom CSS classes/styles for operator button icon of the BitMenuButton. |
| OperatorButtonText | string? | null | Custom CSS classes/styles for operator button text of the BitMenuButton. |
| Callout | string? | null | Custom CSS classes/styles for the callout of the BitMenuButton. |
| CalloutContainer | string? | null | Custom CSS classes/styles for the callout container of the BitMenuButton. |
| ChevronDownButton | string? | null | Custom CSS classes/styles for the chevron down button of the BitMenuButton. |
| ChevronDown | string? | null | Custom CSS classes/styles for the chevron down of the BitMenuButton. |
| Separator | string? | null | Custom CSS classes/styles for the separator of the BitMenuButton. |
| Icon | string? | null | Custom CSS classes/styles for the icon of the BitMenuButton. |
| ItemWrapper | string? | null | Custom CSS classes/styles for each item wrapper of the BitMenuButton. |
| ItemButton | string? | null | Custom CSS classes/styles for each item of the BitMenuButton. |
| ItemIcon | string? | null | Custom CSS classes/styles for each item icon of the BitMenuButton. |
| ItemText | string? | null | Custom CSS classes/styles for each item text of the BitMenuButton. |
| Overlay | string? | null | Custom CSS classes/styles for each overlay of the BitMenuButton. |
| Text | string? | null | Custom CSS classes/styles for the text of the BitMenuButton. |
BitMenuButtonNameSelectors properties
Name |
Type |
Default value |
Description |
|---|---|---|---|
| Class | BitNameSelectorPair<TItem, string?> | new(nameof(BitMenuButtonItem.Class)) | The CSS Class field name and selector of the custom input class. |
| IconName | BitNameSelectorPair<TItem, string?> | new(nameof(BitMenuButtonItem.IconName)) | IconName field name and selector of the custom input class. |
| IsEnabled | BitNameSelectorPair<TItem, bool> | new(nameof(BitMenuButtonItem.IsEnabled)) | IsEnabled field name and selector of the custom input class. |
| IsSelected | BitNameSelectorPair<TItem, bool> | new(nameof(BitMenuButtonItem.IsSelected)) | IsSelected field name and selector of the custom input class. |
| Key | BitNameSelectorPair<TItem, string?> | new(nameof(BitMenuButtonItem.Key)) | Key field name and selector of the custom input class. |
| OnClick | BitNameSelectorPair<TItem, Action<TItem>?> | new(nameof(BitMenuButtonItem.OnClick)) | OnClick field name and selector of the custom input class. |
| Style | BitNameSelectorPair<TItem, string?> | new(nameof(BitMenuButtonItem.Style)) | Style field name and selector of the custom input class. |
| Text | BitNameSelectorPair<TItem, string?> | new(nameof(BitMenuButtonItem.Text)) | Text field name and selector of the custom input class. |
BitNameSelectorPair properties
Name |
Type |
Default value |
Description |
|---|---|---|---|
| Name | string | Custom class property name. | |
| Selector | Func<TItem, TProp?>? | Custom class property selector. |
BitColor enum
Name |
Value |
Description |
|---|---|---|
| Primary | 0 | Info Primary general color. |
| Secondary | 1 | Secondary general color. |
| Tertiary | 2 | Tertiary general color. |
| Info | 3 | Info general color. |
| Success | 4 | Success general color. |
| Warning | 5 | Warning general color. |
| SevereWarning | 6 | SevereWarning general color. |
| Error | 7 | Error general color. |
| PrimaryBackground | 8 | Primary background color. |
| SecondaryBackground | 9 | Secondary background color. |
| TertiaryBackground | 10 | Tertiary background color. |
| PrimaryForeground | 11 | Primary foreground color. |
| SecondaryForeground | 12 | Secondary foreground color. |
| TertiaryForeground | 13 | Tertiary foreground color. |
| PrimaryBorder | 14 | Primary border color. |
| SecondaryBorder | 15 | Secondary border color. |
| TertiaryBorder | 16 | Tertiary border color. |
BitSize enum
Name |
Value |
Description |
|---|---|---|
| Small | 0 | The small size. |
| Medium | 1 | The medium size. |
| Large | 2 | The large size. |
BitVariant enum
Name |
Value |
Description |
|---|---|---|
| Fill | 0 | Fill styled variant. |
| Outline | 1 | Outline styled variant. |
| Text | 2 | Text styled variant. |
BitVisibility enum
Name |
Value |
Description |
|---|---|---|
| Visible | 0 | The content of the component is visible. |
| Hidden | 1 | The content of the component is hidden, but the space it takes on the page remains (visibility:hidden). |
| Collapsed | 2 | The component is hidden (display:none). |
BitDir enum
Name |
Value |
Description |
|---|---|---|
| Ltr | 0 | Ltr (left to right) is to be used for languages that are written from the left to the right (like English). |
| Rtl | 1 | Rtl (right to left) is to be used for languages that are written from the right to the left (like Arabic). |
| Auto | 2 | Auto lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then applies that directionality to the whole element. |
Feedback
You can give us your feedback through our GitHub repo by filing a new Issue or starting a new Discussion.
Or you can review / edit this page on GitHub.
Or you can review / edit this component on GitHub.
- On this page