Невозможно выбрать текст в элементе управления Xamarin.Forms Editor или пользовательском редакторе без полей с помощью средства визуализации

Я реализовал редактор без полей в своем приложении Xamarin.Forms, используя Custom EditorRenderer. Но я столкнулся с проблемой, что текст редактора вообще нельзя выбрать в обоих случаях, ни в элементе управления редактором форм, ни в элементе управления собственного редактора Rendered. В моем приложении есть функция, позволяющая пользователю копировать и вставлять текст в редакторе во время ввода, как и в любом другом приложении для редактирования текста. Это базовая функция в большинстве приложений, и она есть по умолчанию. Но это не работает в моем приложении. Я пытался включить его через

Control.SetTextIsSelectable(true);

но все равно не работает. Я пробовал и другие вещи, например:

Control.CustomSelectionActionModeCallback = new 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;
        }
    }
}

Даже если я использую собственный редактор Xamarin.Forms в Xaml вместо пользовательского средства визуализации, он также не работает вообще. Текст по-прежнему нельзя выделить.


person Nidhi Sood    schedule 08.04.2020    source источник
comment
Я определяю редактор с помощью пользовательского рендерера. Но я не мог создать проблему. Вам лучше опубликовать полный код или поделиться образцом, чтобы я мог протестировать его на своей стороне.   -  person Lucas Zhang    schedule 08.04.2020
comment
Мой код Xaml: ‹renderer:BorderlessEditor Grid.Row=1 x:Name=UserTextEditorAndroid BackgroundColor=White HeightRequest=350 Margin=20,2 MaxLength=1024 IsReadOnly={Binding Source={x:Reference LongTextTemplate}, Path=Editable, Converter ={StaticResource InverseBool}} /›   -  person Nidhi Sood    schedule 08.04.2020
comment
Опубликуйте полный код xaml и пользовательского рендерера в своем вопросе.   -  person Lucas Zhang    schedule 08.04.2020
comment
Хорошо, я обновлю свой пост   -  person Nidhi Sood    schedule 08.04.2020
comment
На моей стороне это работает нормально, когда я долго нажимаю на текст. Обратите внимание, что если IsReadOnly истинно, мы не сможем вставить значение в редактор.   -  person Lucas Zhang    schedule 08.04.2020
comment
Но с моей стороны, я даже не могу выделить текст в редакторе, копирование и вставка - это второстепенное.   -  person Nidhi Sood    schedule 08.04.2020
comment
Я понял проблему. Это из-за Radpopup Телерика. Я реализовал этот редактор внутри radpopup. Вне всплывающего окна он работает нормально.   -  person Nidhi Sood    schedule 08.04.2020
comment
Любая идея с RadPopUp, почему он не поддерживает выделение текста в редакторе?   -  person Nidhi Sood    schedule 08.04.2020


Ответы (1)


У меня такая же проблема, но я не пользуюсь Телериком. Я использую VS 2019 на Win 10. Это легко воспроизвести ...

Создайте новое мобильное приложение (формы Xamarin) и просто добавьте редактор в файл MainPage.xaml. Я также поместил Editor в ScrollView для удовольствия. Код ниже показывает только несколько слов текста, помещенного в редактор, но на самом деле я использовал длинный абзац из документов Microsoft. Я опустил это ниже, чтобы упростить представление кода... и избежать беспорядка!

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="Editor_Test.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <ScrollView>
            <Editor Text="Visual Studio makes it easier ..."
                HorizontalOptions="FillAndExpand"
                VerticalOptions="FillAndExpand" />
        </ScrollView>
    </StackLayout>

</ContentPage>

Я получаю нормальное поведение:

  • Из-за ScrollView я могу прокручивать текст с помощью перетаскивания пальца (мыши).
  • Длительное нажатие (щелчок) выделяет нажатое слово
  • Двойной тап (щелчок) выбирает слово постучал

Я получаю разные результаты, если изменяю 1 строку кода в App ctor, в App.xaml.cs, чтобы создать экземпляр MainPage с помощью NavigationPage, например:

public App()
{
    InitializeComponent();

    //MainPage = new MainPage();
    MainPage = new NavigationPage(new MainPage());
}

Теперь поведение меняется:

  • Длительное нажатие (щелчок) не имеет эффекта (нет выбора)
  • Двойной тап (щелчок) не действует (нет выбора)

На самом деле, я не вижу никакого способа выделить текст в редакторе. Я не знаю, почему это происходит... но это происходит. Это сводило меня с ума, пока я не понял, в чем причина.

Я использую:

  • Формы Xamarin 4.5.0.495
  • Основы Xamarin 1.3.1
  • Сборка для Android 9 (Pie)

Я новичок в Android/Xamarin... поэтому мой вопрос в том, как лучше всего реализовать мою собственную простую навигацию по страницам, т.е. без использования Xamarin NavigationPage? У меня есть простое 3-страничное приложение, с которым я хотел бы добиться прогресса!

person Blaise    schedule 29.06.2020