diff --git a/src/Core/Components/List/ListComponentBase.razor.cs b/src/Core/Components/List/ListComponentBase.razor.cs
index 66cd251b5e..06bb5577a1 100644
--- a/src/Core/Components/List/ListComponentBase.razor.cs
+++ b/src/Core/Components/List/ListComponentBase.razor.cs
@@ -626,7 +626,7 @@ protected virtual async Task OnKeydownHandlerAsync(KeyboardEventArgs e)
{
return;
}
- if (!ChangeOnEnterOnly || (ChangeOnEnterOnly && e.Code == "Enter"))
+ if (!ChangeOnEnterOnly || (ChangeOnEnterOnly && e.Code == nameof(KeyCode.Enter)))
{
await item.OnClickHandlerAsync();
}
diff --git a/src/Core/Components/Menu/FluentMenuItem.razor b/src/Core/Components/Menu/FluentMenuItem.razor
index dadf33efc6..bb68a41ddf 100644
--- a/src/Core/Components/Menu/FluentMenuItem.razor
+++ b/src/Core/Components/Menu/FluentMenuItem.razor
@@ -4,13 +4,14 @@
class="@Class"
style="@Style"
id="@Id"
- disabled="@Disabled"
+ disabled="@Disabled"
expanded=@Expanded
role="@GetRole()"
checked="@Checked"
@onchange="@OnChangeHandlerAsync"
@onclick="@OnClickHandlerAsync"
- @attributes="AdditionalAttributes">
+ @attributes="AdditionalAttributes"
+ @onkeydown="@OnKeyDownHandlerAsync">
@Label
@ChildContent
@if (MenuItems != null)
diff --git a/src/Core/Components/Menu/FluentMenuItem.razor.cs b/src/Core/Components/Menu/FluentMenuItem.razor.cs
index 07693ff541..8c1661c903 100644
--- a/src/Core/Components/Menu/FluentMenuItem.razor.cs
+++ b/src/Core/Components/Menu/FluentMenuItem.razor.cs
@@ -135,5 +135,18 @@ protected async Task OnChangeHandlerAsync(ChangeEventArgs ev)
return null;
}
+ private async Task OnKeyDownHandlerAsync(KeyboardEventArgs e)
+ {
+ if (e.ShiftKey || e.AltKey || e.CtrlKey)
+ {
+ return;
+ }
+
+ if (e.Code is nameof(KeyCode.Enter))
+ {
+ await OnClickHandlerAsync(new MouseEventArgs());
+ }
+ }
+
public void Dispose() => Owner?.Unregister(this);
}
diff --git a/tests/Core/_ToDo/Menu/FluentMenuTests.razor b/tests/Core/_ToDo/Menu/FluentMenuTests.razor
new file mode 100644
index 0000000000..76ad14f146
--- /dev/null
+++ b/tests/Core/_ToDo/Menu/FluentMenuTests.razor
@@ -0,0 +1,33 @@
+@namespace Microsoft.FluentUI.AspNetCore.Components.Tests.Menu
+
+@using Xunit
+@inherits TestContext
+
+@code {
+ [Fact]
+ public void FluentMenu_ChildMenuItem_OnKeyboardEnter_Works()
+ {
+ // Arrange && Act
+ var clickCount = 0;
+ var lockObj = new object();
+ var cut = Render(@
+ test
+ );
+
+ cut.Find("#to-select").KeyDown("Enter", "Enter");
+ cut.Find("#to-select").Click();
+
+ // Assert
+ cut.WaitForAssertion(() => Assert.Equal(2, clickCount));
+ return;
+
+ void OnClick()
+ {
+ lock (lockObj)
+ {
+ clickCount++;
+ }
+ }
+ }
+
+}
diff --git a/tests/Core/_ToDo/Menu/FluentMenuTests.cs b/tests/Core/_ToDo/Menu/FluentMenuTests.razor.cs
similarity index 75%
rename from tests/Core/_ToDo/Menu/FluentMenuTests.cs
rename to tests/Core/_ToDo/Menu/FluentMenuTests.razor.cs
index 2743775cd1..ff27af48f2 100644
--- a/tests/Core/_ToDo/Menu/FluentMenuTests.cs
+++ b/tests/Core/_ToDo/Menu/FluentMenuTests.razor.cs
@@ -6,13 +6,13 @@
using Xunit;
namespace Microsoft.FluentUI.AspNetCore.Components.Tests.Menu;
-public class FluentMenuTests : TestBase
+public partial class FluentMenuTests : TestContext
{
public FluentMenuTests()
{
- TestContext.JSInterop.SetupModule("./_content/Microsoft.FluentUI.AspNetCore.Components/Components/Menu/FluentMenu.razor.js");
- TestContext.Services.AddSingleton(LibraryConfiguration.ForUnitTests);
- TestContext.Services.AddSingleton();
+ JSInterop.SetupModule("./_content/Microsoft.FluentUI.AspNetCore.Components/Components/Menu/FluentMenu.razor.js");
+ Services.AddSingleton(LibraryConfiguration.ForUnitTests);
+ Services.AddSingleton();
}
[Fact]
@@ -27,7 +27,7 @@ public void FluentMenu_Default()
string width = default!;
Action openChanged = _ => { };
bool anchored = default!;
- var cut = TestContext.RenderComponent(parameters => parameters
+ var cut = RenderComponent(parameters => parameters
.Add(p => p.Anchor, anchor)
.Add(p => p.Trigger, trigger)
.Add(p => p.Open, open)
@@ -48,8 +48,8 @@ public void FluentMenuProvider_ShouldUseFluentMenuClass()
{
//Arrange
var className = "some-class";
- var menuProviderCut = TestContext.RenderComponent();
- var menuCut = TestContext.RenderComponent(parameters => parameters
+ var menuProviderCut = RenderComponent();
+ var menuCut = RenderComponent(parameters => parameters
.Add(p => p.UseMenuService, true)
.Add(p => p.Class, className)
.Add(p => p.Anchored, true)