Xamarin.forms 当用户停止使用xamarin表单写入时,如何在编辑器中滚动到顶部
我尝试使用scrolToAsync方法,但不起作用。在xaml上停止编写消息或 按下键盘向下键,控制转到消息的开头。当键盘 向下键单击,编辑器控件转到消息的开头。 我在编辑器propertyChanged上使用此方法Xamarin.forms 当用户停止使用xamarin表单写入时,如何在编辑器中滚动到顶部,xamarin.forms,Xamarin.forms,我尝试使用scrolToAsync方法,但不起作用。在xaml上停止编写消息或 按下键盘向下键,控制转到消息的开头。当键盘 向下键单击,编辑器控件转到消息的开头。 我在编辑器propertyChanged上使用此方法 double iScrollPosition = 0; await editorScrollView.ScrollToAsync(0, iScrollPosition, true); <Frame Margin="10"> <S
double iScrollPosition = 0;
await editorScrollView.ScrollToAsync(0, iScrollPosition, true);
<Frame Margin="10">
<ScrollView x:Name="editorScrollView" >
<Editor x:Name="txtEditor"
HeightRequest="110"
Placeholder="Write message here"
PropertyChanged="OnStatusLabelPropertyChanged" />
</ScrollView>
</Frame>
double iScrollPosition=0;
等待editorScrollView.ScrollToAsync(0,iScrollPosition,true);
任何人都可以帮我做这个你可以使用CustomRenderer并在特定平台上实现它 在Android中
使用Android.Content;
使用xxx.Droid;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.Android;
使用静态Android.Widget.TextView;
[assembly:ExportRenderer(typeof(编辑器)、typeof(MyEditorRenderer))]
名称空间xxx.Droid
{
公共类MyEditorRenderer:EditorRenderer
{
公共MyEditorRenderer(上下文):基本(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.FocusChange+=Control_FocusChange;
}
}
私有void控件\u FocusChange(对象发送方,FocusChangeEventArgs e)
{
如果(!e.HasFocus)
{
对照组(0);
}
}
}
}
在iOS中
使用系统;
使用基础;
使用UIKit;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.iOS;
使用xxx.iOS;
[assembly:ExportRenderer(typeof(编辑器)、typeof(MyEditorRenderer))]
命名空间xxx.iOS
{
公共类MyEditorRenderer:EditorRenderer,IUITextViewDelegate
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
控制结束+=控制结束;
}
}
私有无效控制\u已结束(对象发送方,事件参数e)
{
var editor=发送方作为UITextView;
ScrollRangeToVisible(新的NSRange(0,0));
}
}
}
检查您只需要在特定的平台项目中添加这两个类。您解决了问题吗?
using Android.Content;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using static Android.Widget.TextView;
[assembly: ExportRenderer(typeof(Editor), typeof(MyEditorRenderer))]
namespace xxx.Droid
{
public class MyEditorRenderer : EditorRenderer
{
public MyEditorRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Control.FocusChange += Control_FocusChange;
}
}
private void Control_FocusChange(object sender, FocusChangeEventArgs e)
{
if(!e.HasFocus)
{
Control.SetSelection(0);
}
}
}
}
using System;
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using xxx.iOS;
[assembly:ExportRenderer(typeof(Editor),typeof(MyEditorRenderer))]
namespace xxx.iOS
{
public class MyEditorRenderer:EditorRenderer,IUITextViewDelegate
{
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Control.Ended += Control_Ended;
}
}
private void Control_Ended(object sender, EventArgs e)
{
var editor = sender as UITextView;
editor.ScrollRangeToVisible(new NSRange(0,0));
}
}
}