Aracılığıyla paylaş


WPF Mimarisi

Bu konuda destekli turu sağlar Windows Presentation Foundation (WPF) sınıf hiyerarşisi. Önemli alt sistemlerin çoğunu kapsayan WPFve nasıl etkileşim içinde olduklarını açıklar. Bunu da mimarlar tarafından yapılan seçimlerin bazı ayrıntıları WPF.

Bu konu aşağıdaki bölümleri içerir.

  • System.Object
  • System.Threading.DispatcherObject
  • System.Windows.DependencyObject
  • System.Windows.Media.Visual
  • System.Windows.UIElement
  • System.Windows.FrameworkElement
  • System.Windows.Controls.Control
  • Summary
  • İlgili Konular

System.Object

Birincil WPF programlama modeli sergilenen aracılığıyla yönetilen kod. Tasarım aşamasını başlarında WPF debates burada satır çizilen sisteminin ve yönetilen bileşenleri arasında hakkında bir dizi vardı.yönetilmeyen olanlara. CLR , Geliştirme daha üretken ve güçlü (dahil, bellek yönetimi, hata işleme, ortak tür sistemi vb.) özellikler bir dizi sağlar, ancak bir maliyet. girdiklerinde

Ana bileşen içerir: WPF Aşağıdaki çizimde gösterilmiştir. Diyagram (PresentationFramework, PresentationCore ve milcore) kırmızı bölümlerini ana kod bölümleri olan WPF. Bunlar tek bir yönetilmeyen – milcore bileşenidir. Milcore yazılmış yönetilmeyen kod ile sıkı tümleştirme etkinleştirmek için DirectX. Tüm görüntüleme WPF yapılır DirectX motoru, tanımak için verimli donanım ve yazılım oluşturma. WPFAyrıca bellek ve yürütme üzerinde daha iyi denetim gerekli. Kompozisyon milcore de son derece önemli ve gerekli kadar birçok avantajları sağlayarak performansı motorudur CLR için kazanç performansı.

.NET Framework içinde WPF'nin konumu.

Yönetilen ve yönetilmeyen kısımları arasındaki iletişimi WPF açıklanan daha sonra bu konuda. Geri kalanı yönetilen programlama modeli aşağıda açıklanmıştır.

System.Threading.DispatcherObject

Çoğu nesneler WPF türetmek dan DispatcherObject, eşzamanlılık ile ilgilenme ve iş parçacığı için temel yapıları sağlar. WPFDağıtıcı tarafından uygulanan bir ileti sistemine dayanır. Bu çok tanıdık benzer çalışır Win32 mesaj pompasına ihtiyaç; Aslında, WPF dağıtıcı kullanır User32 iletileri gerçekleştirmek karşılıklı iş görüşmeleri.

Vardır gerçekten iki temel kavramları, eşzamanlılık tartışırken anlamak için WPF – dağıtıcısı ve iş parçacığının benzeşimi.

Tasarım aşaması sırasında WPF, amacı olan tek bir yürütme iş parçacığı için taşıma ancak parçacığı olmayan "affinitized" modeli. Bileşen durumu bir çeşit depolamak için yürütme iş parçacığı kimliğini kullanır iş parçacığı Benzeşme gerçekleşir. Bu en yaygın formu durumunu saklamak için iş parçacığı yerel depo (tls) kullanmaktır. İş parçacığının benzeşimi her mantıksal iş parçacığı yürütme bellek yoğun hale gelebilir işletim sistemi fiziksel tek bir iş parçacığı tarafından olunmalıdır. Sonunda, WPF'ın iş parçacığı modelini tek zincir yürütme iş parçacığı Benzeşme ile varolan User32 iş parçacığı modeli ile eşit tutulan. Bunun birincil nedeni birlikte çalışabilirlik – sistemleri ister OLE 2.0, Pano ve tüm Internet Explorer gerektirir tek iş parçacığı Benzeşme (sta) yürütme.

sta iş parçacığı ile nesneler olması koşuluyla, iş parçacıkları arasında iletişim kurmak ve doğrulamak için bir yol doğru iş parçacığında olan gerekir. Dağıtıcı rolünün burada yatmaktadır. Dağıtıcı sistemiyle birden çok öncelikli sıraya gönderme temel bir iletidir. İletileri örnekler ham giriş bildirimleri (fare taşındığında), framework işlevleri (Düzen) veya kullanıcı komutları (Bu yöntem yürütme). Dan türetmek tarafından DispatcherObject, oluşturduğunuz bir CLR nesne sta davranış vardır ve dağıtıcısı oluşturulma saati. işaretçisine verilmelidir

System.Windows.DependencyObject

Bina içinde kullanılan birincil mimari philosophies birini WPF yöntemleri ya da üzerinden özellikleri için bir tercih edildiolayları. Özellikler bildirimsel ve daha kolay eylem yerine hedefini belirtmesini sağlar. Bu da bir modeli kullanan ya da veri kullanan, kullanıcı arabirimi içeriği görüntülemek için sistem desteklenmiyor. Bu felsefesi, daha iyi bir uygulama davranışını denetlemek için bağlama daha fazla özellikler oluşturma amaçlanan etkisi vardı.

Daha fazla özellikleri, ne çok daha zengin bir özellik sistemi tarafından yönetilen sistem sağlamak için CLR sağlar gerekiyordu. Bir basit bu zenginliği değişikliği bildirimlerini örneğidir. İki yolla bağlama etkinleştirmek için her iki tarafında bir değişiklik bildirimi desteklemek üzere BIND gerekir. Özellik değerlerine bağlı davranış için özelliğinin değeri değiştiğinde bildirilmesi gerekir. Microsoft .NET Framework Olan bir arabirim INotifyPropertyChange, isteğe bağlı, ancak değişiklik bildirimleri yayımlamak bir nesne sağlar.

WPFtüretilen bir daha zengin özellik sistemi sağlar DependencyObject türü. Özelliği gerçek anlamda bir "bağımlılık" sistemidir bağımlılıkları özelliği ifadeler arasında otomatik olarak izler, bağımlılıkları değiştirdiğinizde özelliği sistem özellik değerleri revalidates. Devralan bir özellik varsa, örneğin, (gibi FontSize), bir üst değer. devralan bir öğenin üzerinde özellik değişirse sistem otomatik olarak güncelleştirilen

Temel WPF özelliği sistemidir kavramı, bir özellik deyimi. Bu ilk sürümünde WPF, özellik deyimi sistem kapatıldı ve ifadeleri tüm parçası olarak sağlanan framework. Stil ekleme, veri bağlama özelliği sistem yoksa veya devralma sabit kodlanmış, ancak sonraki Katmanlar çerçevesi içinde yerine sağladığı neden deyimleridir.

Özellik sistemi de özellik değerlerini seyrek depolanmasını sağlar. Nesneleri düzinelerce (aksi takdirde yüzlerce) özellikleri olabilir ve değerler çoğu varsayılan durumlarına olmadığından (miras, stilleri, set vb.), her bir nesne örneği üzerinde tanımlanan her özellik tam ağırlığı olması gerekir.

Son yeni özellik sistemi kavramı özelliğidir Özellikler bağlı. WPFöğeleri oluşturma ve bileşeni yeniden prensibe göre yerleştirilmiştir. Durum genellikle diğer bazı olur öğeyi içeren (gibi bir Grid düzeni öğesi) alt öğeleri (örneğin, satır/sütun bilgileri) davranışını denetlemek için ek veriler gerekiyor. Tüm bu özelliklere sahip her öğe yerine ilişkilendirme, herhangi bir nesne başka bir nesne için özellik tanımları sağlamak için izin verilir. Bu "expando" benzer JavaScript özellikleri.

System.Windows.Media.Visual

Tanımlanan bir sistem ile bir sonraki adıma ekranda çizilen piksel almaktır. Visual Sınıfı sağlar görsel nesneler ağacı her isteğe bağlı olarak çizim yönergeleri ve bu yönergeleri (kırpma, dönüştürme vb.) işlemek ilgili meta verileri içeren oluşturmak için. Visualson derece hafif ve esnek, hiçbir ortak özelliklerin çoğunu zorunda olacak şekilde tasarlanmış API pozlama ve yoğun olarak korunan geri çağrı işlevleri.

Visualgerçekten giriş noktası olan WPF kompozisyon sistem. Visualbağlantı noktası, yönetilen iki bu alt arasında olduğunu API ve yönetilmeyen bir milcore.

WPFmilcore tarafından yönetilen yönetilmeyen veri yapılarını geçiş yapma verileri görüntüler. Kompozisyon düğüm olarak adlandırılan bu yapılar her düğüm oluşturma yönergeleri hiyerarşik görünüm ağacıyla temsil eder. Sağ tarafta, aşağıdaki şekilde gösterildiği, bu ağaç yalnızca bir ileti protokolü erişilebilir.

Programlama, WPF, oluşturduğunuz Visual öğeleri ve türetilmiş türleri, hangi dahili iletişim kompozisyon ağacına üzerinden ileti bu protokolü. Her Visual , WPF biri, yok ya da yaratabilirbirkaç kompozisyon düğümler.

Windows Presentation Foundation Görsel Ağacı.

Çok önemli bir mimari bilgiyi burada – görsel ağacının tümüne fark vardır ve yönergeleri çizim önbelleğe alınır. Grafik bakımından WPF kullanan bir tutulan işleme sistemi. Bu sistem üzerinde kullanıcı koduna geri aramaları engelleme kompozisyon sistemi olmadan yüksek yenileme hızına çizilecek sağlar. Bu, yanıt vermeyen uygulama görünümünü engellemeye yardımcı olur.

Şemada gerçekten çekici olmayan başka bir önemli ayrıntı nasıl sistem kompozisyon aslında gerçekleştirdiği ' dir.

User32 içinde ve GDI, sistem çalışır bir anında modunu kırpma sistemi. Bir bileşeni oluşturulması gereken, sistemin kendisi dışında bileşen piksel rötuş yapmak için izin verilmez ve bu kutusundaki piksellere boyamak için bileşen sonra sorulan bir kırpma sınırlarını kurar. Bir şeyler değiştiğinde etkilenen bileşeni dokunma yeterlidir çünkü bu sistem bellek kısıtlı sistemlerinde çalışır – hiçbir iki bileşen bugüne kadar tek bir piksel rengini katkıda.

WPF"Boyacısı'nın algoritması" Boyama modeli. Bu, her bileşenin kırpma yerine her bileşenin görüntü öne arkadan işlemek istenir olduğunu anlamına gelir. Böylece, her bileşenin önceki bileşenin görüntü boyanacak. Bu modelin avantajı, karmaşık, kısmen saydam şekiller olabilir ' dir. Günümüzün modern grafik donanımı ile bu model oldukça hızlı (durum böyle değildi zaman User32 / GDI oluşturulan).

Temel felsefesi, daha önce belirtildiği gibi WPF olan bir daha bildirimsel "özelliğine merkezli" taşıma programlama modeli. Görsel sisteminde, bu ilginç yerler birkaç içinde görünür.

Tutulan modu grafik sistemi hakkında düşünüyorsanız, öncelikle, bu gerçekten bir zararlara DrawLine/DrawLine tipi modeli uzağa yönlendirilmiş bir veri modeli için – hareket ediyor yeni satır () / yeni Line(). Bu Taşı oluşturma veri kullanan karmaşık işlemler özelliklerini kullanarak ifade için çizim yönergeleri sağlar. Den türetilen türler Drawing olan etkin nesne modeli oluşturma.

İkinci olarak, animasyon sistemi değerlendirmek, neredeyse tamamen bildirimsel olduğunu göreceksiniz. Sonraki konum veya sonraki renk hesaplamak bir geliştirici istemek yerine, animasyonlar bir özellikler kümesi animasyon nesneyi ifade edebilirsiniz. Bu animasyon geliştirici veya Tasarımcısı amacı sonra ifade edebilirsiniz (taşımak bu düğmeyi buradan oraya için 5 saniye içinde), ve sistem bunu yapmanýn en etkili yolu belirleyebilirsiniz.

System.Windows.UIElement

UIElementOlayları düzeni ve giriş de dahil olmak üzere Çekirdek alt sistemleri tanımlar.

Düzeni olan bir çekirdek kavram olarak WPF. Yoktur ya da birçok sisteminde sabit Düzen kümesi (html destekler üç model için Düzen; models Akış, mutlak ve tabloları) veya Mizanpaj için hiçbir model (User32 Seninle yalnızca destekler mutlak konumlandırma). WPFgeliştiricilerin ve tasarımcıların zararlara mantık yerine özellik değerleri tarafından yönlendirilen bir esnek ve Genişletilebilir düzeni modeli istediği varsayımı ile başladı. En UIElement düzeyi, Mizanpaj için temel sözleşme saklanamaz – iki aşama modeli ile Measure ve Arrange geçer.

Measurealmak istediğiniz ne kadar boyutunu belirlemek bir bileşen sağlar. Bu ayrı bir aşama, Arrange çünkü burada bir üst öğe birçok durum vardır onun en iyi konumu ve belirlemek için birkaç kez ölçmek için bir çocuk sorarboyutu. Başka bir anahtar felsefesi, üst öğe alt öğe ölçmek için sor gerçeği gösterir WPF – Boyut içeriği. Tüm denetimlerin de WPF Destek yeteneği boyutuna doğal boyutuna kendi içerik. Yerelleştirme çok kolaylaştırır ve şeyleri yeniden boyutlandırma gibi öğeleri dinamik yerleşimini verir. Arrange Getirin ve son boyutunu belirlemek bir üst aşama sağlarher alt.

Çok fazla zaman çıkış tarafında hakkında konuşurken sık sık harcanan WPF – Visual ve ilişkili nesneleri. Ancak yenilik, çok miktarda giriş tarafında yanı yoktur. Büyük olasılıkla en temel değişikliği giriş modelinde WPF olan tutarlı bir model olarak giriş olayları yönlendirilir aracılığıyla sistem.

Giriş, bir çekirdek mod aygıt sürücüsü üzerinde bir işaret olarak kaynaklı ve doğru işlem ve iş parçacığı Windows Çekirdeği ve User32 ilgili karmaşık bir işlem üzerinden yönlendirilen. Giriş karşılık gelen User32 ileti yönlendirilir sonra WPF, metne dönüştürülecek bir WPF Ham Giriş iletisi ve gönderilen dağıtıcısı. WPFözellik "MouseEnter" gibi özelliklerin etkinleştirilmesi, birden fazla gerçek olaylara dönüştürülmek üzere ham giriş olayları sağlar en garantili teslim sistemiyle düşük bir düzeyde uygulanacak.

Her girdi olay en az iki olay için "Önizleme" dönüştürülür Olay ve gerçek olay. Tüm olaylar WPF sahip bir düşüncesini yönlendirme aracılığıyla öğe ağacı. Olaylar "kabarcık" söylenir Bunlar arasında çapraz bir hedef ağaç kök yukarı ve "tünel" söylenir kökte başlatmak ve bir hedefe aşağı çapraz geçiş. Önizleme olayları tünel olayı önlem veya filtre için bir fırsat ağacındaki herhangi bir öğenin etkinleştirilmesi, giriş. Normal (Önizleme olmayan) olayları kök hedef kabarcık.

Bu bölme tünel ve kabarcık aşaması arasındaki klavye hızlandırıcıları tutarlı biçimde bileşik bir dünyada çalışmak gibi özellikleri uygulaması yapar. User32 destek istediği tüm Hızlandırıcılar içeren tek bir genel tablo (Ctrl + n eşleştirme) "Yeni" sağlayarak klavye hızlandırıcıları uygulaması geliştirirsiniz. Uygulamanız için dağıtıcı içinde çağıracak TranslateAccelerator , User32 girdi iletileri algılamak ve herhangi bir kayıtlı Hızlandırıcı eşleşti, belirlemek. De WPF Bu işe değil çünkü sistem tam olarak "birleştirilebilir" – herhangi bir öğe işlemek ve herhangi bir tuş bileşimini kullanın. Bu iki aşama modeli giriş için kendi "TranslateAccelerator" uygulamak bileşenleri sağlar.

Bu adımı, gerçekleştirilecek UIElement de kullanıma sunuyor kavramı CommandBindings. WPF Komutu sistem işlevi bir komut bitiş noktası – gerçekleştiren bir şey bakımından tanımlamak geliştiriciler sağlar ICommand. Bir giriş hareketi (Ctrl + n) ve (yeni) bir komut arasında eşleme tanımlamak bir öğe komut bağlantıları etkinleştirin. Giriş hareketleri ve komut tanımları genişletilebilir ve birlikte kullanımı anda kablolu. Bu da Önemsiz, örneğin, bir uygulama içinden kullanmak istedikleri Tuþ Baðlanýmlarý özelleştirmek son kullanıcıya izin vermek için sağlar.

"Çekirdek" konusunda, bu noktaya özelliklerinin WPF – PresentationCore derlemede uygulanan özellikler edilmiştir odak. Oluştururken WPF, bir temiz benzer parçaları arasındaki ayrımı (düzeniyle sözleşmenin ister Ölçü ve Yerleştir) ve framework parça (belirli bir düzen uygulaması ister gibi Grid) was istenen sonucu. Amaç, kendi çerçeveleri oluşturmak dış geliştiriciler izin yığınında düşük bir genişletilebilirlik noktası gerekli sağlamaktı.

System.Windows.FrameworkElement

FrameworkElementiki farklı şekilde bakmış. Bir grup ilkeleri ve özelleştirmeler alt katmanında yer sunulan alt sistemlerinde tanıtır WPF. Ayrıca, yeni alt kümesi sunar.

Tarafından sunulan birincil İlkesi FrameworkElement olan geçici uygulama düzeni. FrameworkElementtarafından sunulan temel mizanpaj sözleşmesindeki oluşturur UIElement ve bir düzen "yuva" kavramı ekler tutarlı bir düzen semantiği kullanımlı özellik kümesi Düzen yazarlar için kolaylaştırır. Gibi özellikleri HorizontalAlignment, VerticalAlignment, MinWidth, ve Margin (birkaç örnek vermek gerekirse) türetilen tüm bileþenlerine FrameworkElement tutarlı davranışını içinde düzeni kap.

FrameworkElementAyrıca daha kolay sağlar API Çekirdek katmanlarında bulunan birçok özellik maruz kalma WPF. Örneğin, FrameworkElement animasyon doğrudan erişim sağlayan BeginStoryboard yöntemi. A Storyboard karşı bir dizi birden çok animasyon komut dosyası için bir yol sağlarözellikleri.

İki en önemli şey, FrameworkElement tanıtan veri bağlama ve stilleri.

Veri bağlama alt WPF olması gereken herkesin kullanılan göreceli olarak bilinen Windows Forms veya ASP.NET bir uygulama oluşturmak için user interface (UI). Bu sistemlerin her biri, bir veri parçasını bağlanacak belirli bir öğeyi bir veya daha fazla özelliklerini istediğiniz ifade etmek için bir basit yolu yoktur. WPFözellik bağlama, dönüştürme ve liste bağlama için tam desteğine sahip.

Veri bağlamada en ilginç özelliklerinden biri WPF olan giriş veri şablonları. Veri şablonları veri parçası görünür nasıl hazırlanmasına belirlemenize olanak sağlar. Veriye ilişkili bir özel kullanıcı arabirimi oluşturmak yerine, bunun yerine kapatmak sorunu ve oluşturulacak görüntülenmesini belirlemek verileri sağlar.

Stil gerçekten basit veri bağlama biçimidir. Bir özellik kümesi, stilleri kullanarak bir veya daha fazla öğe örneklerine paylaşılan tanımından bağlayabilirsiniz. Stilleri bir öğeye uygulanan açık başvuru tarafından (ayarlayarak Style özelliği) veya dolaylı olarak bir stille ilişkilendirme CLR türü öğesi.

System.Windows.Controls.Control

Denetimin en önemli templating özelliğidir. Tutulan modu işleme sistemi olarak WPF'ın kompozisyon sistemi hakkında düşünüyorsanız, templating kendi işleme parametreli, bildirime dayanan bir şekilde açıklamak bir denetim sağlar. A ControlTemplate gerçekten şey özelliklerine göre sunulan bağlarıyla öğeleri alt kümesi oluşturmak için bir komut dosyası birden fazladenetim.

Controlhisse senedi bir özellikler kümesi sağlar Foreground, Background, Padding, hangi şablonu bir kaç ad için can sonra kullan görünümünü özelleştirmek için authorsdenetim. Bir denetim uygulaması veri modeli ve etkileşim modeli sağlar. Etkileşim modelini (örneğin, bir pencereyi kapat) komutlarını ve bağlar (gibi penceresinin üst köşesindeki kırmızı x işaretini tıklatarak) hareketleri girmek için tanımlar. Veri modeli, etkileşim modeli özelleştirmek veya (şablonu tarafından saptanır) ekranını özelleştirme için bir özellikler kümesi sağlar.

Bu bölünmüş veri modeli (Özellikler), etkileşim modelini (komutları ve olaylar) ve görüntü modeli (Şablonlar) arasında tam bir denetimin görünümünü ve davranışını özelleştirmesini sağlar.

Bir ortak denetimler, veri modelinin içerik modeli özelliğidir. Bir denetime bakarsanız ister Button, "İçerik" adlı bir özelliğe sahip olduğunu görürsünüz tür Object. İçinde Windows Forms ve ASP.NET, bu özellik genellikle bir dize olacaktır – ancak içerik türünü sınırlar koyabilirsiniz düğme. Ya da basit bir dize, bir karmaşık veri nesnesi veya öğenin tamamını ağacı için bir düğme içerik olabilir. Bir veri nesnesi olması durumunda, veri şablonu bir görüntü oluşturmak için kullanılır.

Summary

WPFveri sunum sistemleri kullanan dinamik oluşturmanıza izin vermek için tasarlanmıştır. Sistemin her parçası, bu sürücü davranışı nesneler arasında özellik kümeleri oluşturmak için tasarlanmıştır. Veri bağlama sisteminin temel bir parçasıdır ve her katmanında tümleştirilir.

Geleneksel uygulamaların bir görüntü oluşturun ve bazı veri bağlama. De WPF, her boy, görüntü denetimi hakkında her şeyi oluşturulacak bazı türüne göre veri bağlama. Bir düğmenin içinde bulunan metin, düğme içinde oluşan bir denetim oluşturma ve button öğesinin içerik özelliği, görüntü bağlama tarafından görüntülenir.

Başladığınızda geliştirme WPF tabanlı uygulamaları, onu çok tanıdık. rahatsız Özelliklerini, nesnelerini kullan ayarlayabilirsiniz ve veri bağlama çok aynı şekilde kullanarak yapabilirsiniz Windows Forms veya ASP.NET. Mimarisi, daha derin bir araştırmasını ile WPF, bulmak olasılığı olduğunu var, temelde kabul verileri uygulama Çekirdek sürücü olarak çok daha zengin uygulamalar oluşturma

Ayrıca bkz.

Başvuru

Visual

UIElement

ICommand

FrameworkElement

DispatcherObject

CommandBinding

Control

Kavramlar

Veri Bağlama Genel Bakış

Düzen Sistemi

Animasyona Genel bakış