Skip to content
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

AutoCompleteEntry

A text input with debounced search, dropdown suggestions, busy indicator, and custom item templates. Supports both local filtering and remote search via a command/callback. Fully styleable on both MAUI (bindable properties) and Blazor (CSS custom properties).

  • NuGet downloads for Shiny.Maui.Controls
  • NuGet downloads for Shiny.Blazor.Controls
Frameworks
.NET MAUI
Blazor

MAUI

AutoCompleteEntry

Blazor

Local filter dropdown Async search with spinner
Local filter dropdown on Blazor Async search with spinner on Blazor

Provide an ItemsSource without a SearchCommand — the control filters items locally as the user types:

<shiny:AutoCompleteEntry
Text="{Binding SearchText}"
Placeholder="Search fruits..."
ItemsSource="{Binding AllFruits}"
SelectedItem="{Binding SelectedFruit}"
TextMemberPath="Name" />

Set SearchCommand to trigger an async search. Bind IsBusy to show the spinner during loading:

<shiny:AutoCompleteEntry
Text="{Binding SearchText}"
Placeholder="Search..."
ItemsSource="{Binding Results}"
SelectedItem="{Binding SelectedResult}"
SearchCommand="{Binding SearchCommand}"
IsBusy="{Binding IsSearching}"
TextMemberPath="Name"
DebounceInterval="400"
Threshold="2" />
Property Type Default Description
Text string "" Current text value (TwoWay)
Placeholder string? null Placeholder text
PlaceholderColor Color? / string? null Placeholder color
ItemsSource IList null Suggestion items
SelectedItem object? null Selected item (TwoWay)
SearchCommand ICommand / EventCallback<string> null Async search trigger
TextMemberPath string? null Property name to display from complex objects
ItemTemplate DataTemplate / RenderFragment<object> null Custom dropdown item rendering
IsBusy bool false Show/hide loading spinner (TwoWay)
DebounceInterval int 300 Debounce delay in milliseconds
Threshold int 1 Minimum characters before searching
MaxDropDownHeight double 200 Maximum dropdown height (px)
TextColor Color? / string? null Input text color
FontSize double 14 Input font size
FontFamily string? null Font family (MAUI only)
FontAttributes FontAttributes None Bold/italic (MAUI only)
DropDownBackgroundColor Color? / string? White Dropdown background
DropDownBorderColor Color? / string? LightGray Dropdown border color
CornerRadius double 4 Dropdown border radius (MAUI only)
SpinnerColor Color? / string? Grey Loading spinner color
ShowAllOnFocus bool false Show all unfiltered items when the input is focused (local filtering only)
Event Args Description
ItemSelected object? Fires when a suggestion is selected from the dropdown
<shiny:AutoCompleteEntry
FontSize="18"
FontFamily="OpenSans"
FontAttributes="Bold"
TextColor="Black"
PlaceholderColor="DarkGray"
DropDownBackgroundColor="#F9FAFB"
DropDownBorderColor="#6B7280"
SpinnerColor="DodgerBlue"
CornerRadius="12"
MaxDropDownHeight="300" />
var autoComplete = new AutoCompleteEntry
{
TextMemberPath = nameof(Product.Name),
FontSize = 16,
CornerRadius = 8,
ItemTemplate = new DataTemplate(() =>
{
var grid = new Grid
{
ColumnDefinitions =
{
new ColumnDefinition(GridLength.Star),
new ColumnDefinition(GridLength.Auto)
},
Padding = new Thickness(8, 6)
};
var name = new Label { FontSize = 14 };
name.SetBinding(Label.TextProperty, nameof(Product.Name));
var price = new Label { FontSize = 12, TextColor = Colors.Grey };
price.SetBinding(Label.TextProperty, nameof(Product.PriceDisplay));
grid.Add(name, 0, 0);
grid.Add(price, 1, 0);
return grid;
})
};
<AutoCompleteEntry
Text="@searchText"
TextChanged="v => searchText = v"
Placeholder="Search..."
ItemsSource="@results"
SelectedItemChanged="OnSelected"
SearchCommand="OnSearch"
IsBusy="@isBusy"
TextMemberPath="Name"
DebounceInterval="400"
Threshold="2"
FontSize="16"
TextColor="#333"
DropDownBackgroundColor="#fff"
DropDownBorderColor="#ccc"
SpinnerColor="#3B82F6"
InputClass="my-input"
DropDownClass="my-dropdown">
<ItemTemplate Context="item">
@{ var p = (Product)item; }
<div style="display:flex;justify-content:space-between;">
<span>@p.Name</span>
<span style="color:#888;">@p.PriceDisplay</span>
</div>
</ItemTemplate>
</AutoCompleteEntry>
@code {
string searchText = "";
bool isBusy;
IList? results;
async Task OnSearch(string query)
{
isBusy = true;
results = await MyApi.SearchAsync(query);
isBusy = false;
}
void OnSelected(object? item)
{
if (item is Product p) { /* handle selection */ }
}
}
Property Type Default Description
CssClass string? null CSS class applied to root element
InputClass string? null CSS class applied to the input element
DropDownClass string? null CSS class applied to the dropdown
AdditionalAttributes IDictionary<string, object>? null Unmatched HTML attributes passed to root element

Override these on a parent element or the component’s root to theme without parameters:

Variable Default Controls
--shiny-ac-text inherit Input text color
--shiny-ac-ph #9CA3AF Placeholder color
--shiny-ac-dd-bg #fff Dropdown background
--shiny-ac-dd-border #D1D5DB Dropdown border
--shiny-ac-spinner #9CA3AF Spinner color
--shiny-ac-font-size inherit Input font size
--shiny-ac-dd-max-h 200px Dropdown max height

Example – dark theme a section without touching individual components:

.dark-section {
--shiny-ac-text: #f0f0f0;
--shiny-ac-ph: #888;
--shiny-ac-dd-bg: #1e1e1e;
--shiny-ac-dd-border: #444;
--shiny-ac-spinner: #60A5FA;
}
claude plugin marketplace add shinyorg/skills
claude plugin install shiny@shiny

One plugin installs all 35 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.

copilot plugin marketplace add https://github.com/shinyorg/skills
copilot plugin install shiny@shiny

One plugin installs all 35 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.

View shiny-controls Skill