【发布时间】:2020-07-20 12:57:31
【问题描述】:
我已经使用自定义 EditorRenderer 在我的 Xamarin.Forms 应用程序中实现了无边框编辑器。但是我面临一个问题,即在这两种情况下,无论是在表单编辑器控件中还是在渲染的本机编辑器控件中,编辑器文本都是不可选择的。我的应用程序具有让用户在输入时在编辑器中复制粘贴文本的功能,就像在任何其他文本编辑应用程序中一样。这是大多数应用程序的基本功能,默认情况下存在。但它在我的应用程序中不起作用。我尝试通过
启用它Control.SetTextIsSelectable(true);
但它仍然无法正常工作。我也尝试过其他的东西,比如:
Control.CustomSelectionActionModeCallback = 新 CustomSelectionActionModeCallback(); Control.CustomInsertionActionModeCallback = new CustomInsertionActionModeCallback();
但是根本没有任何效果,甚至一个单词都没有选择文本。有人对这个问题有任何想法吗?如何使文本可选择并允许自定义编辑器中的默认复制粘贴功能?
这是我在 Xaml 中的代码:
<renderer:BorderlessEditor
Grid.Row="1"
x:Name="UserTextEditorAndroid"
BackgroundColor="{StaticResource WhiteColor}"
HeightRequest="350"
Margin="20,2"
MaxLength="1024"
IsReadOnly="{Binding Source={x:Reference LongTextTemplate}, Path=Editable, Converter={StaticResource InverseBool}}" />
而自定义渲染代码是:
public class BorderlessEditorRenderer : EditorRenderer
{
public BorderlessEditorRenderer()
{
}
public static void Init() { }
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
Control.Background = null;
var layoutParams = new MarginLayoutParams(Control.LayoutParameters);
layoutParams.SetMargins(0, 0, 0, 0);
LayoutParameters = layoutParams;
Control.LayoutParameters = layoutParams;
Control.SetPadding(0, 0, 0, 0);
SetPadding(0, 0, 0, 0);
Control.SetTextIsSelectable(true);
Control.VerticalScrollBarEnabled = false;
}
}
}
即使我在 Xaml 中使用 Xamarin.Forms 自己的编辑器而不是自定义渲染器,它也根本不起作用。文本仍然无法选择。
【问题讨论】:
-
我用自定义渲染器定义了编辑器。但我无法产生问题。您最好发布完整的代码或分享一个示例,以便我可以测试它。
-
我的 Xaml 代码:
-
在您的问题中发布 xaml 和自定义渲染器的完整代码。
-
好的,我会更新我的帖子
-
当我长按文本时它工作正常。请注意,如果
IsReadOnly为真,我们无法将值粘贴到编辑器。
标签: xamarin.forms xamarin.android custom-controls text-editor textselection