Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.forms Xamarin表单输入框使用自定义键盘失去光标位置_Xamarin.forms - Fatal编程技术网

Xamarin.forms Xamarin表单输入框使用自定义键盘失去光标位置

Xamarin.forms Xamarin表单输入框使用自定义键盘失去光标位置,xamarin.forms,Xamarin.forms,我正在尝试使用MVVM模式创建一个带有自定义键盘的计算器应用程序。计算器有四个输入框,我使用自定义渲染器抑制手机键盘的显示。我注意到,当我在条目中键入数字时,主菜失去了光标位置,通过点击另一个位置手动更改光标位置,然后再次开始键入。当我再次开始键入时,初始字符进入正确的位置,但其后的任何字符都位于字符串的开头,这意味着光标位置为零 我不知道是什么在重置光标位置。我通过绑定跟踪光标的位置。下面是我下面代码的一个小片段。因此,如果选择EntryOne(具有焦点)并开始键入,则会调用GetText方法

我正在尝试使用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后发生。请接受此答案(单击☑️ 在这个答案的左上角),这将帮助更多有同样问题的人:)。