Eto: [WPF] Pemilihan RichTextArea tidak berfungsi dengan benar

Dibuat pada 4 Okt 2018  ·  7Komentar  ·  Sumber: picoe/Eto

Perilaku yang Diharapkan

Teks dipilih dengan benar sesuai dengan rentang yang ditentukan.

Perilaku Sebenarnya

Ada salah penempatan 5 karakter di sebelah kanan.

Langkah-langkah untuk Mereproduksi Masalah

  1. Buat kontrol RichTextArea
  2. Masukkan beberapa teks
  3. Tentukan pilihan untuk mengatur warnanya

Kode yang Menunjukkan Masalah

rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);

spesifikasi

  • Versi: 2.5.0-ci-10013
  • Platform: WPF
  • Sistem Operasi: Windows 10

WPF:

wpf

GTK2 (Linux):

gtk2_linux

Xamarin.Mac:

xamarin mac

Komentar yang paling membantu

@DanWBR , ah ya itu tidak akan berfungsi seperti yang Anda miliki sayangnya - WPF menambahkan baris baru di akhir properti Text (terlepas dari apakah teks Anda memilikinya atau tidak). Saya belum menemukan cara untuk mengatasinya pada saat ini, tetapi ini adalah masalah yang terpisah dari yang ini.

Apa yang saya sarankan adalah untuk menjaga posisi saat ini dalam variabel dan menambahnya setelah menambahkan teks. Mengakses properti Text setiap kali hanya untuk mendapatkan panjangnya akan melambat saat teks menjadi lebih besar.

Semua 7 komentar

Di Windows, karakter akhir baris entah bagaimana tidak dihitung sebagai indeks untuk pilihan. Saat ini saya menggunakan kode berikut sebagai solusi:

private void Write(string message, Color c)
        {
            Append(message + Environment.NewLine, true);

            int idx = -1, last = -1;
            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                idx = Text.LastIndexOf(message);
                last = Text.Length;
            }
            else
            {
                var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
                idx = lines.LastIndexOf(message);
                last = lines.Length;
            }

            if (idx == -1)
                return;

            Selection = new Range<int>(idx, idx + message.Length);
            SelectionForeground = c;
            Selection = new Range<int>(last, last);
        }

Tapi ini pasti bug ...

Ya, saya telah menggunakan peretasan yang sama dengan @ManuelHu sebelumnya, itu tidak cantik. Saya belum yakin bagaimana mengatasi ini secara efektif tanpa menjadi lambat dengan teks besar.

Terima kasih telah melaporkan masalah ini!

Hai @DanWBR ,

Ini harus diperbaiki di cabang pengembangan terbaru. Bisakah Anda mencobanya? Di semua platform, baris baru sekarang diperlakukan sebagai satu karakter \n .

Hai @cwensley , masih ada satu karakter yang harus diperbaiki:

captura de tela 2018-11-16 as 08 06 39

Hai @DanWBR , apakah Anda memiliki repro untuk off oleh satu masalah? Sepertinya saya tidak bisa mereproduksinya.

https://github.com/DanWBR/dwsim5/blob/windows/DWSIM.UI.Desktop.Forms/Forms/Flowsheet/Flowsheet.eto.cs#L1245

Mungkin saya menggunakan indeks yang salah? Ini berfungsi di macOS dan GTK.

@DanWBR , ah ya itu tidak akan berfungsi seperti yang Anda miliki sayangnya - WPF menambahkan baris baru di akhir properti Text (terlepas dari apakah teks Anda memilikinya atau tidak). Saya belum menemukan cara untuk mengatasinya pada saat ini, tetapi ini adalah masalah yang terpisah dari yang ini.

Apa yang saya sarankan adalah untuk menjaga posisi saat ini dalam variabel dan menambahnya setelah menambahkan teks. Mengakses properti Text setiap kali hanya untuk mendapatkan panjangnya akan melambat saat teks menjadi lebih besar.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat