获取Blazor文本输入的插入符号位置

我正在处理Blazor文本区域输入。我想要实现的是,每当用户键入"@“字符时,我将弹出一个小窗口,他们可以从其中进行选择。无论他们选择什么,我都会将该文本插入到文本区,紧跟在他们键入"@“的位置之后。

我得到了这个HTML:

<textarea rows="10" class="form-control" id="CSTemplate" @bind="original" @oninput="(e => InputHandler(e.Value))" @onkeypress="@(e => KeyWasPressed(e))"></textarea>

代码为:

protected void InputHandler(object value)
{
    original = value.ToString();
}

private void KeyWasPressed(KeyboardEventArgs args)
{
    if (args.Key == "@")
    {
        showVariables = true;
    }
}

protected void AddVariable(string v)
{
    original += v + " ";
    showVariables = false;
}

这样做效果很好。showVariables布尔值是我控制弹出窗口的方式,AddVariable函数是我将所选文本添加回文本区域的方式。

然而,有一个小问题。如果我已经输入了某些文本,然后我返回到之前的任何位置并输入"@",菜单仍然会弹出,没有问题,但当用户选择文本时,插入内容当然只会附加到文本的末尾。我在尝试获取"@“的确切插入符号位置时遇到了问题,因此我只将文本添加到"@”之后,而不是添加到输入的末尾。

非常感谢!

转载请注明出处:http://www.cshftz.com/article/20230503/927164.html