Редактор не поддерживает CursorPosition
Событие изменено. Вы можете создать собственный элемент управления EditText
. EditText
предоставляет событие OnSelectionChanged
. И добавьте этот настраиваемый EditText
в EditorRenderer.
MyEditor.cs : Создать настраиваемый элемент управления редактора. И привязка события OnSelectionChanged.
public class MyEditor : Editor
{
public static readonly BindableProperty SelectionChangedProperty =
BindableProperty.Create("SelectionChanged", typeof(EventHandler), typeof(MyEditor), null);
public event EventHandler SelectionChanged;
public void SelectionChange(int preIndex,int currentIndex)
{
EventHandler eventHandler = this.SelectionChanged;
SelectionEventArgs selectionEventArgs = new SelectionEventArgs() { lastPos = preIndex, curPos = currentIndex };
eventHandler?.Invoke((object)this, selectionEventArgs);
}
public class SelectionEventArgs : EventArgs
{
public int lastPos { get; set; }
public int curPos { get; set; }
}
}
EditorRenderer.cs :
[assembly: ExportRenderer(typeof(MyEditor), typeof(XamarinDemo.Droid.EditorRenderer))]
namespace XamarinDemo.Droid
{
class EditorRenderer : Xamarin.Forms.Platform.Android.EditorRenderer, MyEditText.EditTextSelectChange
{
Context _context;
public EditorRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
MyEditText myEditText = new MyEditText(_context);
myEditText.Text = Element.Text;
myEditText.setEditTextSelectChange(this);
SetNativeControl(myEditText);
}
public void change(int lastPos, int curPos)
{
//Console.WriteLine("lastPos ===" + lastPos + "curPos ====" + curPos);
((MyEditor)Element).SelectionChange(lastPos, curPos);
}
}
}
MyEditText.cs : в Xamarin.Forms Android spefi c project, создайте EditTextSelectChange
для наследования EditorRenderer.
class MyEditText :FormsEditText
{
private int mLastPos = 0;
private int mCurPos = 0;
private EditTextSelectChange editTextSelectChange;
public void setEditTextSelectChange(EditTextSelectChange editTextSelectChange)
{
this.editTextSelectChange = editTextSelectChange;
}
public MyEditText(Context context):base(context)
{
}
protected override void OnSelectionChanged(int selStart, int selEnd)
{
base.OnSelectionChanged(selStart, selEnd);
if (this.editTextSelectChange != null)
{
mCurPos = selEnd;
editTextSelectChange.change(mLastPos, mCurPos);
mLastPos = mCurPos;
}
}
public interface EditTextSelectChange
{
void change(int lastPos, int curPos);
}
}
Использование:
<local:MyEditor SelectionChanged="SelectionChange" Text="hakssksksssfsvdsv" />
Скрытый код:
public partial class Page13 : ContentPage
{
public Page13()
{
InitializeComponent();
}
private void SelectionChange(object sender, EventArgs e)
{
Console.WriteLine("lastpos =="+ ((SelectionEventArgs)e).lastPos +"curpos =="+ ((SelectionEventArgs)e).curPos);
}
}
Скриншот:
введите описание изображения здесь