Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
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
15 changes: 15 additions & 0 deletions src/MainDemo.Wpf/Domain/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -485,4 +485,19 @@ private bool DemoItemsFilter(object obj)
&& item.Name.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0;
#endif
}

[RelayCommand]
private async Task OpenQuickSearchAsync()
{
var quickSearchDialog = new QuickSearchDialog
{
DataContext = new QuickSearchDialogViewModel(DemoItems)
};
var result = await DialogHost.Show(quickSearchDialog, "RootDialog");
if (result is DemoItem selectedItem)
{
SelectedItem = selectedItem;
SelectedIndex = DemoItems.IndexOf(selectedItem);
}
}
}
28 changes: 28 additions & 0 deletions src/MainDemo.Wpf/Domain/QuickSearchDialog.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<UserControl x:Class="MaterialDesignDemo.QuickSearchDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MaterialDesignDemo"
xmlns:materialDesign="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Padding="24,16"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<Grid Width="500" Height="500">
<materialDesign:AutoSuggestBox VerticalAlignment="Top"
materialDesign:HintAssist.Hint="Search (Esc to close)"
materialDesign:TextFieldAssist.HasClearButton="True"
materialDesign:TextFieldAssist.HasLeadingIcon="True"
materialDesign:TextFieldAssist.LeadingIcon="Search"
DisplayMember="Name"
DropDownMaxHeight="420"
FontSize="20"
PreviewKeyDown="SearchBox_KeyDown"
SelectedItem="{Binding SelectedItem}"
ShowSuggestionsOnFocus="True"
Style="{StaticResource MaterialDesignOutlinedAutoSuggestBox}"
Suggestions="{Binding FilteredItems}"
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</UserControl>
22 changes: 22 additions & 0 deletions src/MainDemo.Wpf/Domain/QuickSearchDialog.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using MaterialDesignThemes.Wpf;

namespace MaterialDesignDemo;

/// <summary>
/// Interaction logic for QuickSearchDialog.xaml
/// </summary>
public partial class QuickSearchDialog : UserControl
{
public QuickSearchDialog()
{
InitializeComponent();
}

private void SearchBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
DialogHost.Close("RootDialog", null);
}
}
}
32 changes: 32 additions & 0 deletions src/MainDemo.Wpf/Domain/QuickSearchDialogViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using CommunityToolkit.Mvvm.ComponentModel;
using MaterialDesignDemo.Shared.Domain;
using MaterialDesignThemes.Wpf;

namespace MaterialDesignDemo.Domain;

public partial class QuickSearchDialogViewModel(IReadOnlyCollection<DemoItem> items) : ObservableObject
{
private readonly IReadOnlyCollection<DemoItem> _items = items;

[ObservableProperty]
private string _searchText = "";

partial void OnSearchTextChanged(string value)
=> OnPropertyChanged(nameof(FilteredItems));

[ObservableProperty]
private DemoItem? _selectedItem;

partial void OnSelectedItemChanged(DemoItem? value)
{
if (value is not null)
{
DialogHost.Close("RootDialog", value);
}
}

public IReadOnlyCollection<DemoItem> FilteredItems
=> string.IsNullOrWhiteSpace(SearchText)
? _items
: _items.Where(i => i.Name.Contains(SearchText, StringComparison.OrdinalIgnoreCase)).ToList();
}
2 changes: 2 additions & 0 deletions src/MainDemo.Wpf/Fields.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -709,9 +709,11 @@
VerticalAlignment="Center"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Text="Simple source list" />
<CheckBox Content="ShowSuggestionsOnFocus" x:Name="cbShowSuggestionsOnFocus"/>

<smtx:XamlDisplay UniqueKey="fields_autosuggestion_1">
<materialDesign:AutoSuggestBox VerticalAlignment="Bottom"
ShowSuggestionsOnFocus="{Binding ElementName=cbShowSuggestionsOnFocus, Path=IsChecked}"
Suggestions="{Binding AutoSuggestBox1Suggestions}"
Text="{Binding AutoSuggestBox1Text, UpdateSourceTrigger=PropertyChanged}" />
</smtx:XamlDisplay>
Expand Down
2 changes: 1 addition & 1 deletion src/MainDemo.Wpf/Home.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
Style="{StaticResource MaterialDesignFlatButton}">
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="Binoculars" />
<TextBlock Margin="8,0,0,0" Text="EXPLORE" />
<TextBlock Margin="8,0,0,0" Text="EXPLORE (Ctrl+K)" />
</StackPanel>
</Button>
</StackPanel>
Expand Down
5 changes: 5 additions & 0 deletions src/MainDemo.Wpf/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
Style="{StaticResource MaterialDesignWindow}"
WindowStartupLocation="CenterScreen"
mc:Ignorable="d">
<Window.InputBindings>
<KeyBinding Key="K"
Modifiers="Control"
Command="{Binding OpenQuickSearchCommand}" />
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="Copy" Executed="OnCopy" />
</Window.CommandBindings>
Expand Down
18 changes: 17 additions & 1 deletion src/MaterialDesign3.Demo.Wpf/Domain/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
using System.ComponentModel;
using System.Configuration;
using System.Windows.Data;
using CommunityToolkit.Mvvm.Input;
using MaterialColorUtilities;
using MaterialDesignDemo.Shared.Domain;
using MaterialDesignThemes.Wpf;
using MaterialDesignThemes.Wpf.Transitions;

namespace MaterialDesign3Demo.Domain;

public class MainWindowViewModel : ViewModelBase
public partial class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel(ISnackbarMessageQueue snackbarMessageQueue, string? startupPage)
{
Expand Down Expand Up @@ -502,4 +503,19 @@ private bool DemoItemsFilter(object obj)
return obj is DemoItem item
&& item.Name.ToLower().Contains(_searchKeyword!.ToLower());
}

[RelayCommand]
private async Task OpenQuickSearchAsync()
{
var quickSearchDialog = new QuickSearchDialog
{
DataContext = new QuickSearchDialogViewModel(DemoItems)
};
var result = await DialogHost.Show(quickSearchDialog, "RootDialog");
if (result is DemoItem selectedItem)
{
SelectedItem = selectedItem;
SelectedIndex = DemoItems.IndexOf(selectedItem);
}
}
}
39 changes: 39 additions & 0 deletions src/MaterialDesign3.Demo.Wpf/Domain/QuickSearchDialog.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<UserControl x:Class="MaterialDesign3Demo.Domain.QuickSearchDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MaterialDesign3Demo.Domain"
xmlns:materialDesign="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Padding="24,16"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<Grid Width="500" Height="500">
<materialDesign:AutoSuggestBox VerticalAlignment="Top"
materialDesign:HintAssist.Hint="Search (Esc to close)"
materialDesign:TextFieldAssist.HasClearButton="True"
materialDesign:TextFieldAssist.HasLeadingIcon="True"
materialDesign:TextFieldAssist.LeadingIcon="Search"
DisplayMember="Name"
DropDownMaxHeight="420"
FontSize="20"
PreviewKeyDown="SearchBox_KeyDown"
SelectedItem="{Binding SelectedItem}"
ShowSuggestionsOnFocus="True"
Style="{StaticResource MaterialDesignOutlinedAutoSuggestBox}"
Suggestions="{Binding FilteredItems}"
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}">
<materialDesign:AutoSuggestBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<materialDesign:PackIcon Kind="{Binding UnselectedIcon}" ScaleToSizeOfWith="{Binding ElementName=tbName}" />
<TextBlock x:Name="tbName"
Margin="8,0,0,0"
Text="{Binding Name}" />
</DockPanel>
</DataTemplate>
</materialDesign:AutoSuggestBox.ItemTemplate>
</materialDesign:AutoSuggestBox>
</Grid>
</UserControl>
22 changes: 22 additions & 0 deletions src/MaterialDesign3.Demo.Wpf/Domain/QuickSearchDialog.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using MaterialDesignThemes.Wpf;

namespace MaterialDesign3Demo.Domain;

/// <summary>
/// Interaction logic for QuickSearchDialog.xaml
/// </summary>
public partial class QuickSearchDialog : UserControl
{
public QuickSearchDialog()
{
InitializeComponent();
}

private void SearchBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
DialogHost.Close("RootDialog", null);
}
}
}
30 changes: 30 additions & 0 deletions src/MaterialDesign3.Demo.Wpf/Domain/QuickSearchDialogViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using CommunityToolkit.Mvvm.ComponentModel;
using MaterialDesignThemes.Wpf;

namespace MaterialDesign3Demo.Domain;
public partial class QuickSearchDialogViewModel(IReadOnlyCollection<DemoItem> items) : ObservableObject
{
private readonly IReadOnlyCollection<DemoItem> _items = items;

[ObservableProperty]
private string _searchText = "";

partial void OnSearchTextChanged(string value)
=> OnPropertyChanged(nameof(FilteredItems));

[ObservableProperty]
private DemoItem? _selectedItem;

partial void OnSelectedItemChanged(DemoItem? value)
{
if (value is not null)
{
DialogHost.Close("RootDialog", value);
}
}

public IReadOnlyCollection<DemoItem> FilteredItems
=> string.IsNullOrWhiteSpace(SearchText)
? _items
: _items.Where(i => i.Name.Contains(SearchText, StringComparison.OrdinalIgnoreCase)).ToList();
}
2 changes: 1 addition & 1 deletion src/MaterialDesign3.Demo.Wpf/Home.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
Style="{StaticResource MaterialDesignFlatButton}">
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="Binoculars" />
<TextBlock Margin="8,0,0,0" Text="EXPLORE" />
<TextBlock Margin="8,0,0,0" Text="EXPLORE (Ctrl+K)" />
</StackPanel>
</Button>
</StackPanel>
Expand Down
5 changes: 5 additions & 0 deletions src/MaterialDesign3.Demo.Wpf/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
Style="{StaticResource MaterialDesignWindow}"
WindowStartupLocation="CenterScreen"
mc:Ignorable="d">
<Window.InputBindings>
<KeyBinding Key="K"
Modifiers="Control"
Command="{Binding OpenQuickSearchCommand}" />
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="Copy" Executed="OnCopy" />
</Window.CommandBindings>
Expand Down
Loading
Loading