Bagaimana cara membuat subkelas dari kelas Inline? (yang digunakan di FlowDocument)

Di WPF saya ingin membuat Inline implementasi. Dari dokumentasi Inline: "Sebuah abstrak kelas yang menyediakan basis untuk semua elemen konten aliran inline." Kelas seperti Figure, Run atau Span mewarisi dari Inline.

Kelas khusus saya yang diwarisi dari Inline akan menjadi sesuatu seperti 'Lari 2 baris'. Saya memiliki kebutuhan khusus untuk alur dokumen dan sepertinya ini satu-satunya cara. Namun saya tidak tahu harus mulai dari mana: Inline tidak mendefinisikan anggota apa pun! Ini adalah kelas abstrak sehingga dimaksudkan untuk diwarisi tetapi tidak ada dokumentasi tentang cara mewarisinya. Tidak di MSDN dan tidak di tempat lain di mana saya dapat menemukannya.

Jika Anda dapat menyediakan beberapa sumber online (tutorial/blog/artikel) atau contoh kode cara membuat subkelas Inline. Misalnya saja kotak kosong dengan lebar dan tinggi tertentu.

Jika Anda ingin tahu mengapa saya ingin membuat elemen Inline khusus, lihat pertanyaan Buat editor akord gitar di WPF.


person Rasto    schedule 27.04.2011    source sumber
comment
Jika Anda dapat memberikan link ke kode sumber Run atau Span itu juga akan sangat membantu.   -  person Rasto    schedule 27.04.2011
comment
Anda cukup menggunakan Reflektor untuk melihat kodenya   -  person Thomas Levesque    schedule 27.04.2011
comment
@Thomas Levesque: Tadinya saya akan melakukannya tetapi akan memakan waktu karena saya belum pernah menggunakan reflektor sebelumnya. Saya harus menginstalnya dan mencari cara untuk menggunakannya.   -  person Rasto    schedule 27.04.2011
comment
Tidak bisakah Anda mewarisi dari Run saja?   -  person jv42    schedule 23.12.2011


Jawaban (1)


Kelas dasar dapat digunakan hanya untuk tujuan menambahkan fidelitas tipe. Misalnya, kode dalam prosesor FlowDocument mungkin hanya ingin melakukan kode seperti:

if(currentElement is Inline)
{
   // Do something
}

Inline sebenarnya tidak perlu melakukan apa pun sama sekali.

Sejauh membuat subkelas dari Inline, saya pikir Anda mungkin tidak dapat mencapai apa yang Anda inginkan. Pemahaman saya adalah bahwa penyaji FlowDocument bertanggung jawab untuk melihat tipe elemen dan menafsirkan perilakunya berdasarkan tipe dan propertinya. Dengan kata lain, ia tidak mengetahui kode khusus Anda. Saya pikir hal terbaik yang dapat Anda lakukan adalah membuat subkelas dari elemen yang berguna dan membuat subkelas Anda berantakan dengan nilai properti atau apa pun yang dapat diganti.

Anda mungkin dapat menambahkan properti terlampir dan memproses elemen turunan yang mendefinisikan properti tersebut juga. Misalnya, jika Anda ingin wadah hyperlink mengizinkan elemen turunan yang berbeda untuk menyediakan tautan yang berbeda, Anda dapat membuat subkelas dari Hyperlink, menentukan properti Tautan terlampir baru, dan menangani peristiwa klik untuk turunan secara berbeda dari Hyperlink itu sendiri.

Anda mungkin juga bisa meraih kesuksesan dengan elemen InlineUIContainer dan BlockUIContainer, yang memungkinkan Anda menyematkan UIElement apa pun di dalamnya, termasuk UIElements khusus.

person Kevin Hsu    schedule 29.04.2011
comment
Saya khawatir properti terlampir tidak akan membantu saya - Saya mencoba mempengaruhi tata letak/perilaku rendering teks. Dan teks itu akan berperilaku seperti teks dalam dokumen hanya jika tidak ada di blok mana pun (jadi tidak ada InlineUIContainer dengan UIElements atau BlockUIContainer khusus yang merupakan solusi yang tepat). Khususnya pemilihan teks akan menganggap keseluruhan InlineUIContainer atau BlockUIContainer menjadi satu elemen. Untuk detailnya lihat pertanyaan saya Buat editor akord gitar di WPF dan pertanyaan terkait di sana. - person Rasto; 30.04.2011
comment
Saya pikir Anda mungkin kurang beruntung dalam hal ini. Jika Anda menemukan solusinya, silakan bagikan. - person Kevin Hsu; 30.04.2011
comment
Saya mungkin... Orang-orang WPF yang mendesain FlowDocument sepertinya lupa tentang gitaris :(. Hampir selalu ada solusi dengan bahasa pemrograman seperti C#. Ini mungkin tidak mudah - seperti menulis ulang setengah dari WPF. Kali ini sepertinya saya akan melakukannya harus menulis sesuatu milikku sendiri FlowDocument dan RichTextBox sampai batas tertentu :((( - person Rasto; 30.04.2011
comment
@drasto Kevin benar dalam hal ini. Anda tidak dapat mengubah rendering TextElement apa pun, Anda hanya dapat membuat subkelas untuk mengubah properti. Anda harus menandai jawabannya sebagai diterima. - person Markus Hütter; 01.05.2011
comment
@Markus Hütter: Setelah 2 jawaban terakhir Anda, saya sudah menganggap Anda sebagai otoritas dalam hal FlowDocument. Jadi saya mungkin akan menerima jawaban Kevin setelah beberapa waktu (sekitar sebulan). Untuk saat ini hanya mendapat +1 dari saya. Aku sudah curiga dia benar... - person Rasto; 02.05.2011