Xamarin.forms Xamarin表单输入框使用自定义键盘失去光标位置
我正在尝试使用MVVM模式创建一个带有自定义键盘的计算器应用程序。计算器有四个输入框,我使用自定义渲染器抑制手机键盘的显示。我注意到,当我在条目中键入数字时,主菜失去了光标位置,通过点击另一个位置手动更改光标位置,然后再次开始键入。当我再次开始键入时,初始字符进入正确的位置,但其后的任何字符都位于字符串的开头,这意味着光标位置为零 我不知道是什么在重置光标位置。我通过绑定跟踪光标的位置。下面是我下面代码的一个小片段。因此,如果选择EntryOne(具有焦点)并开始键入,则会调用GetText方法,我将通过引用传递光标位置。条目中已存在的文本分为两部分。光标位置前的所有字符都是第一部分,光标位置后的所有字符都是第二部分。该参数是用户按下的数字。所有三个字符串连接在一起,以在输入框中显示新文本。如果我使用手机的键盘,我没有这个问题。所以我知道这是可能的 请查看附加的应用程序,如果需要更多信息,请告诉我。任何帮助都将不胜感激 提前谢谢你Xamarin.forms Xamarin表单输入框使用自定义键盘失去光标位置,xamarin.forms,Xamarin.forms,我正在尝试使用MVVM模式创建一个带有自定义键盘的计算器应用程序。计算器有四个输入框,我使用自定义渲染器抑制手机键盘的显示。我注意到,当我在条目中键入数字时,主菜失去了光标位置,通过点击另一个位置手动更改光标位置,然后再次开始键入。当我再次开始键入时,初始字符进入正确的位置,但其后的任何字符都位于字符串的开头,这意味着光标位置为零 我不知道是什么在重置光标位置。我通过绑定跟踪光标的位置。下面是我下面代码的一个小片段。因此,如果选择EntryOne(具有焦点)并开始键入,则会调用GetText方法
EntryOneText = GetText(EntryOneText, parameter, ref _entryOneCursorIndex);
private string GetText(string text, string parameter, ref int cursorPosition)
{
if (!string.IsNullOrEmpty(text))
{
string partOne = text.Substring(0, cursorPosition);
string partTwo = text.Substring(cursorPosition, (text.Length - cursorPosition));
cursorPosition++;
return string.Format("{0}{1}{2}", partOne, parameter, partTwo);
}
cursorPosition++;
return parameter;
}
感谢亚历山德罗·卡利亚罗。他在Xamarin表单论坛上为我提供了答案
private void EntryOne_Focused(object sender, FocusEventArgs e)
{
_mainViewModel.SelectedEntry = 1;
_mainViewModel.EntryOneCursorIndex = ((Entry)sender).CursorPosition;
}
public ICommand NumericCommand
{
get
{
return new Command<string>((string parameter) =>
{
if (!string.IsNullOrEmpty(parameter))
{
switch (SelectedEntry)
{
case 1:
if (EntryOneText == null)
EntryOneText = "";
int save = EntryOneCursorIndex;
EntryOneText = EntryOneText.Insert(save, parameter);
EntryOneCursorIndex = save + 1;
//EntryOneText = GetText(EntryOneText, parameter, ref _entryOneCursorIndex);
break;
private void EntryOne\u聚焦(对象发送方,聚焦目标)
{
_mainViewModel.SelectedEntry=1;
_mainViewModel.EntryOneCursorIndex=((条目)sender).CursorPosition;
}
公共ICommand NumericCommand
{
得到
{
返回新命令((字符串参数)=>
{
如果(!string.IsNullOrEmpty(参数))
{
开关(选择并重试)
{
案例1:
if(EntryOneText==null)
EntryOneText=“”;
int save=EntryOneCursorIndex;
EntryOneText=EntryOneText.Insert(保存,参数);
EntryOneCursorIndex=保存+1;
//EntryOneText=GetText(EntryOneText,参数,ref\u entryOneCursorIndex);
打破
当您手动更改光标位置并设置文本时,条目似乎失去焦点。然后_entryOneCursorIndex设置为0。在找到解决方案时将更新您。谢谢。我期待您的解决方案。嗯,到目前为止还没有找到解决方案。每次我手动更改光标位置时,\u entryOneCursorIndex都会更新重置。重置在调用GetText后发生。请接受此答案(单击☑️ 在这个答案的左上角),这将帮助更多有同样问题的人:)。