@@ -33,18 +33,27 @@ new DropDownMenu(@evt => client.Toast("Selected: " + @evt.Value),
3333Default menu items are the most common type, providing simple clickable options. The second example shows how to add custom tags for more advanced [ event handling] ( ../../01_Onboarding/02_Concepts/07_EventHandlers.md ) .
3434
3535``` csharp demo-tabs
36- Layout .Horizontal ().Gap (2 ).Center ()
37- | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
38- new Button (" Default Items" ),
39- MenuItem .Default (" Copy" ),
40- MenuItem .Default (" Paste" ),
41- MenuItem .Default (" Cut" ),
42- MenuItem .Default (" Delete" ))
43- | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
44- new Button (" With Tags" ),
45- MenuItem .Default (" Save" ).Tag (" save-action" ),
46- MenuItem .Default (" Export" ).Tag (" export-action" ),
47- MenuItem .Default (" Import" ).Tag (" import-action" ))
36+ public class DefaultMenuItemsDemo : ViewBase
37+ {
38+ private enum MenuAction { Save , Export , Import }
39+
40+ public override object ? Build ()
41+ {
42+ var client = UseService <IClientProvider >();
43+ return Layout .Horizontal ().Gap (2 ).Center ()
44+ | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
45+ new Button (" Default Items" ),
46+ MenuItem .Default (" Copy" ),
47+ MenuItem .Default (" Paste" ),
48+ MenuItem .Default (" Cut" ),
49+ MenuItem .Default (" Delete" ))
50+ | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
51+ new Button (" With Tags" ),
52+ MenuItem .Default (" Save" ).Tag (MenuAction .Save ),
53+ MenuItem .Default (" Export" ).Tag (MenuAction .Export ),
54+ MenuItem .Default (" Import" ).Tag (MenuAction .Import ));
55+ }
56+ }
4857```
4958
5059Default menu items are the most common type, providing simple clickable options. The second example shows how to add custom tags for more advanced event handling.
@@ -177,23 +186,33 @@ Layout.Horizontal().Gap(2).Center()
177186Custom event handling allows you to implement complex [ business logic] ( ../../03_Hooks/02_Core/11_UseService.md ) based on menu selections, making your dropdowns more interactive and useful.
178187
179188``` csharp demo-tabs
180- new DropDownMenu (@evt => {
181- var value = @evt .Value ? .ToString ();
182- if (value == " delete" ) {
183- client .Toast (" Deleting item..." );
184- } else if (value == " export" ) {
185- client .Toast (" Exporting data..." );
186- } else {
187- client .Toast ($" Selected: {value }" );
188- }
189- },
190- new Button (" Custom Actions" ))
191- | MenuItem .Default (" View" ).Tag (" view" )
192- | MenuItem .Default (" Edit" ).Tag (" edit" )
193- | MenuItem .Default (" Delete" ).Tag (" delete" )
194- | MenuItem .Separator ()
195- | MenuItem .Default (" Export" ).Tag (" export" )
196- | MenuItem .Default (" Share" ).Tag (" share" )
189+ public class CustomActionsDropDownDemo : ViewBase
190+ {
191+ private enum ItemAction { View , Edit , Delete , Export , Share }
192+
193+ public override object ? Build ()
194+ {
195+ var client = UseService <IClientProvider >();
196+ return new DropDownMenu (@evt => {
197+ if (Enum .TryParse <ItemAction >(@evt .Value ? .ToString (), ignoreCase : true , out var action ))
198+ {
199+ switch (action )
200+ {
201+ case ItemAction .Delete : client .Toast (" Deleting item..." ); break ;
202+ case ItemAction .Export : client .Toast (" Exporting data..." ); break ;
203+ default : client .Toast ($" Selected: {action }" ); break ;
204+ }
205+ }
206+ },
207+ new Button (" Custom Actions" ))
208+ | MenuItem .Default (" View" ).Tag (ItemAction .View )
209+ | MenuItem .Default (" Edit" ).Tag (ItemAction .Edit )
210+ | MenuItem .Default (" Delete" ).Tag (ItemAction .Delete )
211+ | MenuItem .Separator ()
212+ | MenuItem .Default (" Export" ).Tag (ItemAction .Export )
213+ | MenuItem .Default (" Share" ).Tag (ItemAction .Share );
214+ }
215+ }
197216```
198217
199218<WidgetDocs Type =" Ivy.DropDownMenu " ExtensionTypes =" Ivy.DropDownMenuExtensions " SourceUrl =" https://github.com/Ivy-Interactive/Ivy-Framework/blob/main/src/Ivy/Widgets/DropDownMenu.cs " />
@@ -209,44 +228,54 @@ Complex using
209228Here's a comprehensive example combining multiple features:
210229
211230``` csharp demo-tabs
212- Layout .Horizontal ().Gap (2 ).Center ()
213- | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
214- new Button (" User Menu" ),
215- MenuItem .Separator (),
216- MenuItem .Default (" View Profile" ).Tag (" profile" ),
217- MenuItem .Default (" Account Settings" ).Tag (" settings" ),
218- MenuItem .Default (" Preferences" ).Tag (" preferences" ),
219- MenuItem .Separator (),
220- MenuItem .Default (" Theme" )
221- .Children (
222- MenuItem .Checkbox (" Light" ).Tag (" theme-light" ),
223- MenuItem .Checkbox (" Dark" ).Checked ().Tag (" theme-dark" ),
224- MenuItem .Checkbox (" System" ).Tag (" theme-system" )
225- ),
226- MenuItem .Default (" Notifications" )
227- .Children (
228- MenuItem .Checkbox (" Email" ).Checked ().Tag (" notify-email" ),
229- MenuItem .Checkbox (" Push" ).Checked ().Tag (" notify-push" ),
230- MenuItem .Checkbox (" SMS" ).Tag (" notify-sms" )
231- ),
232- MenuItem .Separator (),
233- MenuItem .Default (" Help & Support" ).Tag (" help" ),
234- MenuItem .Default (" About" ).Tag (" about" ),
235- MenuItem .Separator (),
236- MenuItem .Default (" Logout" ).Tag (" logout" ))
237- .Header (Text .Muted (" Signed in as john.doe@company.com" ))
238- .Top ()
239- .Align (DropDownMenu .AlignOptions .End )
240- | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
241- new Button (" Settings Menu" ),
242- MenuItem .Default (" General" ).Tag (" general" ),
243- MenuItem .Default (" Appearance" ).Tag (" appearance" ),
244- MenuItem .Default (" Privacy" ).Tag (" privacy" ),
245- MenuItem .Default (" Security" ).Tag (" security" ),
246- MenuItem .Separator (),
247- MenuItem .Default (" Updates" ).Tag (" updates" ),
248- MenuItem .Default (" Support" ).Tag (" support" ))
249- .Header (Text .Muted (" Application Settings" ))
231+ public class ComplexDropDownDemo : ViewBase
232+ {
233+ private enum UserMenuAction { Profile , Settings , Preferences , ThemeLight , ThemeDark , ThemeSystem , NotifyEmail , NotifyPush , NotifySms , Help , About , Logout }
234+ private enum SettingsMenuAction { General , Appearance , Privacy , Security , Updates , Support }
235+
236+ public override object ? Build ()
237+ {
238+ var client = UseService <IClientProvider >();
239+ return Layout .Horizontal ().Gap (2 ).Center ()
240+ | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
241+ new Button (" User Menu" ),
242+ MenuItem .Separator (),
243+ MenuItem .Default (" View Profile" ).Tag (UserMenuAction .Profile ),
244+ MenuItem .Default (" Account Settings" ).Tag (UserMenuAction .Settings ),
245+ MenuItem .Default (" Preferences" ).Tag (UserMenuAction .Preferences ),
246+ MenuItem .Separator (),
247+ MenuItem .Default (" Theme" )
248+ .Children (
249+ MenuItem .Checkbox (" Light" ).Tag (UserMenuAction .ThemeLight ),
250+ MenuItem .Checkbox (" Dark" ).Checked ().Tag (UserMenuAction .ThemeDark ),
251+ MenuItem .Checkbox (" System" ).Tag (UserMenuAction .ThemeSystem )
252+ ),
253+ MenuItem .Default (" Notifications" )
254+ .Children (
255+ MenuItem .Checkbox (" Email" ).Checked ().Tag (UserMenuAction .NotifyEmail ),
256+ MenuItem .Checkbox (" Push" ).Checked ().Tag (UserMenuAction .NotifyPush ),
257+ MenuItem .Checkbox (" SMS" ).Tag (UserMenuAction .NotifySms )
258+ ),
259+ MenuItem .Separator (),
260+ MenuItem .Default (" Help & Support" ).Tag (UserMenuAction .Help ),
261+ MenuItem .Default (" About" ).Tag (UserMenuAction .About ),
262+ MenuItem .Separator (),
263+ MenuItem .Default (" Logout" ).Tag (UserMenuAction .Logout ))
264+ .Header (Text .Muted (" Signed in as john.doe@company.com" ))
265+ .Top ()
266+ .Align (DropDownMenu .AlignOptions .End )
267+ | new DropDownMenu (@evt => client .Toast (" Selected: " + @evt .Value ),
268+ new Button (" Settings Menu" ),
269+ MenuItem .Default (" General" ).Tag (SettingsMenuAction .General ),
270+ MenuItem .Default (" Appearance" ).Tag (SettingsMenuAction .Appearance ),
271+ MenuItem .Default (" Privacy" ).Tag (SettingsMenuAction .Privacy ),
272+ MenuItem .Default (" Security" ).Tag (SettingsMenuAction .Security ),
273+ MenuItem .Separator (),
274+ MenuItem .Default (" Updates" ).Tag (SettingsMenuAction .Updates ),
275+ MenuItem .Default (" Support" ).Tag (SettingsMenuAction .Support ))
276+ .Header (Text .Muted (" Application Settings" ));
277+ }
278+ }
250279```
251280
252281</Body >
0 commit comments