Pertanyaan Darimana tampilan wpf berasal?


Saya baru saja membaca buku ini WPF dari Thomas Claudius Huber. Dia menyatakan, bahwa semua kontrol WPF "tidak terlihat". Mereka hanya mendapatkan tampilan (dan visual tree) dari mereka ControlTemplate. Itu menimbulkan satu pertanyaan: Darimana tampilan WPF?

Maksud saya: Button mempunyai sebuah ControlTemplate dengan beberapa Borders dan a ContentPresenter. Di mana keduanya (Border dan ContentPresenter) mendapatkan tampilan mereka dari?

Saya sudah googled dan menemukan, itu Border adalah Decorator dan mengatur tampilan di OnRender-Metode.

Apakah itu intinya? Apakah semua elemen lain yang tidak memiliki ControlTemplate mendefinisikan tampilan mereka di OnRender-Metode?


5
2017-07-17 08:44


asal


Jawaban:


Jawaban singkat: iya nih. Semua elemen visual yang bukan Kontrol dan memiliki "tampilan", menentukan tampilan kata di dalamnya UIElement.OnRender penggantian metode.

Jawaban panjang: Kontrol jangan gunakan OnRender metode untuk menentukan penampilan mereka. Sebaliknya, "penampilan" mereka didefinisikan dalam Styles dan Templates. Ketika tidak ada Gaya atau Templat didefinisikan secara eksplisit dalam aplikasi, Kontrol WPF cukup menggunakan Gaya dan Templat bawaan mereka dari sistem saat ini Tema (untuk info lebih lanjut tentang Tema, periksa artikel MSDN ini).

Anggap saja bahwa Kerangka ini memiliki Kamus Sumber Daya sendiri dengan Gaya default untuk semua kontrol yang ada di dalamnya. Sebagai contoh, berikut ini adalah ControlTemplate default dari ComboBox: ComboBox Styles and Templates

Yang sedang berkata, ada beberapa komponen visual yang memiliki penampilan mereka didefinisikan melalui kode, biasanya melalui OnRender mengesampingkan. Mereka bukan Kontrol; mereka Dekorator, Shapes dan hal-hal seperti itu. Hal-hal yang memiliki "tampilan": Border, Rectangle, dll. Tetapi pada akhirnya, semua Kontrol terlihat berkat elemen-elemen ini karena semua ControlTemplates terdiri dari salah satu elemen ini, atau Kontrol lainnya.

TextBlock, sebagai Menjalankan, FlowDocument dan elemen serupa lainnya, adalah elemen khusus yang dibuat khusus untuk renderisasi teks. Mereka jatuh ke dalam kategori yang sama dari Shapes atau Dekorator, kecuali mereka mengkhususkan pada teks daripada grafis. TextBlock, misalnya, bukan Kontrol, dan mendefinisikan tampilan pada nya OnRender metode. Label, di sisi lain, ADALAH Kontrol; tetapi jika Anda memeriksa Templatnya, Anda akan melihatnya akan menggunakan TextBlock untuk menampilkan teks.

Ada elemen lain (seperti ContentPresenter, ItemsPresenter) yang tidak memiliki tampilan apa pun, tidak tersirat, tidak secara default, tidak oleh Styles atau Templates. Ini adalah elemen logika, yang menentukan struktur tampilan. ContentPresenter, misalnya, meraih Content dan ContentTemplate properti dari ContentControl, dan memastikan bahwa Template yang dimaksud dirender dengan benar dan terikat dengan data tersebut, sehingga untuk berbicara. Tetapi mereka tidak memiliki representasi visual mereka sendiri.

Oh, dan aku hampir lupa Panel. Panel tidak Kontrol, baik, dan mereka memiliki tampilan sendiri. Tetapi mirip dengan Presenter, mereka juga elemen logika yang menentukan bagaimana elemen visual lainnya divisualisasikan. Lebih spesifik, tata letaknya.


6
2017-07-17 08:54