aspnetcore/test/testapps/BasicTestApp/KeyPressEventComponent.cshtml

34 lines
1.3 KiB
Plaintext

@using System.Collections.Generic
@using Microsoft.AspNetCore.Blazor.RenderTree
Type here: <input onkeypress=@CreateNewDelegateInstance() />
<ul>
@foreach (var key in keysPressed)
{
<li>@key</li>
}
</ul>
@functions {
List<string> keysPressed = new List<string>();
// TODO: Fix this
// Currently, you can only trigger an event handler whose value changed in the most
// recent render cycle. That's because we reference the event handlers by their index
// into the current diff's ReferenceFrames array. We need some better mechanism of
// locating the delegates that is independent of whether the corresponding attribute
// changed in the last diff, and not assuming the attribute in the original render
// tree is still at the same index.
// Once that's fixed, remove the 'CreateNewDelegateInstance' method entirely and
// the 'irrelevantObject' arg from below, and simplify to onkeypress=@OnKeyPressed
UIEventHandler CreateNewDelegateInstance()
{
var irrelevantObject = new object();
return args => OnKeyPressed(args, irrelevantObject);
}
void OnKeyPressed(UIEventArgs eventArgs, object irrelevantObject)
{
keysPressed.Add(((UIKeyboardEventArgs)eventArgs).Key);
}
}