Aracılığıyla paylaş


WPF içinde ağaçlar

Birçok teknolojileri, öğeleri ve bileşenleri burada geliştiriciler oluşturma veya bir uygulama davranışını etkileyen ağacında nesne düğümlerinin doğrudan kullanan bir ağaç yapısında düzenlenir. Windows Presentation Foundation (WPF)program öğeleri arasında ilişki tanımlamak için de birkaç ağaç yapısı metaphors kullanır. En iyi bölümü wpf geliştiricileri bir uygulama kodu oluşturabilir veya Nesne Ağacı mecazının hakkında kavramsal düşünme sırasında xaml uygulama bölümlerini tanımlamak için ancak belirli API'yi çağırmasını veya belirli biçimlendirme kullanarak bunun yerine xml yerli içinde kullandığınız gibi bazı genel nesne ağaç işleme API wpf sergiler ağaç mecazının görünümü sağlayan iki Yardımcısı sınıfları LogicalTreeHelper ve VisualTreeHelper. Bu aynı ağaçları belirli anahtar wpf özellikleri davranışını anlamak için yararlı olduğu için koşulları görsel ağaç ve mantıksal ağaç de wpf belgelerinde kullanılır. Bu konuda ne görsel ağaç ve mantıksal ağaç temsil tanımlar, nasıl genel bir nesne ağacı kavram gibi ağaçları arasında ilişki açıklanır ve tanıtan LogicalTreeHelper ve VisualTreeHelpers

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

  • Trees in WPF
  • Mantıksal ağaç
  • Görsel ağaç
  • Ağaçları, öğeleri içerik ve ana içerik
  • Ağaç çapraz geçişi
  • "Ağaç" olarak yönlendirilmiş olaylar için yollar
  • Kaynak sözlükler ve ağaçları
  • İlgili Konular

Trees in WPF

En eksiksiz ağaç yapısında WPF olan nesne ağacı. Bir uygulama sayfasında tanımlarsanız, XAML ve sonra XAML, ağaç yapısı öğeleri iç içe ilişkiler temel alınarak oluşturulurişaretleme. Bir uygulamayı tanımlamak veya bir kısmını uygulama kodu içinde sonra ağaç yapısı oluşturulur, belirli bir nesne için içerik modeli uygulayan özellikleri için özellik değerlerini atamak nasıl dayalı. De Windows Presentation Foundation (WPF), tam nesne ağacı conceptualized ve onun ortak API için bildirilen iki yolu vardır: mantıksal ağaç ve görsel ağaç olarak. Mantıksal ağaç ve görsel ağaç arasındaki farklılıklar her zaman mutlaka önemli değildir, ancak bunlar zaman zaman sorunlar belirli ile neden olabilir WPF alt sistemler ve etkileyen seçenekleri yaptığınız biçimlendirme veya kodu.

Size her zaman mantıksal ağaç veya görsel ağaç doğrudan değiştiremez olsa bile, ağaçları nasıl etkileşim kavramlarını anlama wpf teknolojisi olarak anlaşılması için yararlıdır. Bazı tür ağaç mecazının da özellik devralma ve olay yönlendirmesi nasıl çalıştığını anlamak için çok önemli olduğu gibi wpf düşünüyorum WPF.

NotNot

Nesne Ağacı daha gerçek bir API bir kavram olduğundan, kavramını düşünmek başka bir nesne grafiği yoludur.Pratikte vardır ilişkileri ağacı mecazının bulunduğu koparır aşağı çalışma zamanında nesneler arasında.Yine de, özellikle xaml tanımlı UI ile ağaç mecazının çoğu wpf belgelerine terim Nesne Ağacı bu genel kavram başvururken kullanacağını yeteri kadar geçerlidir.

Mantıksal ağaç

De WPF, içeriğini yedeklemeniz nesnelerinin özelliklerini ayarlayarak UI öğeleri Eklebu öğeleri. Örneğin, öğe ekleme bir ListBox işleme göre Denetim, Items özelliği. Bunu yaptığınızda, maddeler halinde yerleştirdiğinizi ItemCollection yani Items özelliği değeri. Eklemek için aynı şekilde nesneleri için bir DockPanel, işlemek, kendi Children özelliği değeri. Burada, nesneler ekleme UIElementCollection. Kod örneği için bkz: Nasıl Yapılır: Dinamik Olarak Öğe Ekleme.

De Extensible Application Markup Language (XAML), liste öğeleri yerleştirdiğinizde bir ListBox denetimleri veya diğer kullanıcı Arabirimi öğeleri veya bir DockPanel, de Items ve Children özellikleri, açıkça veya örtük olarak, gibi aşağıdaki örnek.

<DockPanel
  Name="ParentElement"
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  >
  <!--implicit: <DockPanel.Children>-->
  <ListBox DockPanel.Dock="Top">
    <!--implicit: <ListBox.Items>-->
    <ListBoxItem>
      <TextBlock>Dog</TextBlock>
    </ListBoxItem>
    <ListBoxItem>
      <TextBlock>Cat</TextBlock>
    </ListBoxItem>
    <ListBoxItem>
      <TextBlock>Fish</TextBlock>
    </ListBoxItem>
  <!--implicit: </ListBox.Items>-->
  </ListBox>
  <Button Height="20" Width="100" DockPanel.Dock="Top">Buy a Pet</Button>
  <!--implicit: </DockPanel.Children>-->
</DockPanel>

Bu xaml xml olarak bir belge nesne modeli altında işlenecek olan ve açıklamalı etiketleri dahil out olarak örtülü (hangi yasal olacaktı) sonra ortaya çıkan xml dom ağaç öğeleri için dahil, <ListBox.Items> ve diğer dolaylı öğeleri. Ancak xaml işleme bu şekilde biçimlendirme okuma ve yazma için nesneleri, elde edilen nesne grafiği ekleme harfi harfine ListBox.Items. Ancak sahip bir ListBox özelliği adlı Items içeren bir ItemCollectionve ItemCollection seçeneğiyle başlatılmış, ancak ne zaman boş ListBox xaml işlenir. Sonra içerik olarak var her alt nesne öğe ListBox eklenen ItemCollection ayrıştırıcı çağrılar tarafından ItemCollection.Add. Bu örnek, bir nesne ağacına xaml işleme şimdiye görünüşte oluşturulan nesne ağacı mantıksal ağaç temelde nerede örneğidir.

Ancak, mantıksal ağaç dışarı bile xaml örtülü sözdizimi öğelerle çalışma zamanında UI çarpanlarına uygulamanız için varolan tüm nesne grafiği değil. Bunun ana nedeni, görsel ve şablonları. Örneğin, Button. Mantıksal ağaç raporlar Button nesnesi ve dize de Content. Ancak çalışma zamanı Nesne Ağacı'ndaki bu düğme için daha fazla. Özellikle, düğmesi yalnızca, çünkü şekline belirli bir beliren Button control şablonunu uygulandığı. Uygulanan bir şablondan gelen görsel (şablon tanımlı gibi Border visual düğme etrafındaki koyu gri) (örneğin, bir giriş görünür UI olay işleme ve mantıksal ağaç okuma) çalışma zamanı sırasında mantıksal ağacının aradığınız bile mantıksal ağaç bildirilmiyor. Şablon görsel öğeler bulmak için bunun yerine visual ağaç incelemek gerekir.

Hakkında daha fazla bilgi için XAML sözdizimi haritalarına oluşturulan nesne grafiği ve xaml, örtülü sözdiziminde Ayrıntılı XAML Sözdizimi veya XAML'e Genel Bakış (WPF)

Mantıksal ağaç amacı

Böylece içerik modelleri kolaylıkla bunların olası alt nesneler üzerinde yineleme yapabilirsiniz ve böylece içerik modelleri Genişletilebilir mantıksal ağaç bulunmaktadır. Ayrıca, mantıksal ağaç bir çerçeve tüm nesneleri mantıksal ağaç ne zaman yüklenir gibi bildirimleri belirli sağlar. Temel olarak, mantıksal zamanında nesne grafiği görsel çıkarır, ancak kendi çalışma zamanı uygulama kompozisyon karşı pek çok sorgulama işlemleri için yeterli framework düzeyinde yaklaşık ağacıdır.

Buna ek olarak, hem statik ve dinamik kaynak başvurular için mantıksal ağaç içinde yukarı doğru bakarak giderilen Resources ilk istekte bulunan nesne mantıksal ağaç etmeden ve her denetimi koleksiyonlarıyla FrameworkElement (veya FrameworkContentElement) diğer Resources içeren değerini bir ResourceDictionary, büyük olasılıkla içeren bu anahtarı. Mantıksal ağaç ve görsel ağaç bulunduğunda mantıksal ağaç kaynak araması için kullanılır. Kaynak sözlükler ve arama ile ilgili daha fazla bilgi için bkz: Kaynaklara Genel Bakış.

Mantıksal ağaç oluşumunu

Adresinde tanımlanan mantıksal ağaç wpf framework düzeyinde, yani mantıksal ağaç işlemleri için en uygun olan wpf temel öğe ya da olduğunu FrameworkElement veya FrameworkContentElement. Ancak, siz bakın aslında kullanırsanız LogicalTreeHelper API, bazen mantıksal ağaç içeren düğüm olan ya da olmayan FrameworkElement veya FrameworkContentElement. Örneğin, mantıksal ağaç raporlar Text değeri bir TextBlock, olan bir dize.

Mantıksal ağaç geçersiz kılma

Gelişmiş denetimin yazarlar override mantıksal ağaç birkaç kılarak APIs nasıl bir genel nesne veya içerik modeli ekler veya kaldırır içindeki nesneleri tanımlamantıksal ağaç. Mantıksal ağaç nasıl bir örnek için bkz: Nasıl Yapılır: Mantıksal Ağacı Geçersiz Kılma.

Property Value Inheritance

Özellik değeri devralma karma ağaç çalışır. İçeren gerçek meta verileri Inherits sağlayan özellik devralma özelliği wpf framework düzeyinde FrameworkPropertyMetadata sınıfa Bu nedenle, özgün değeri taşıyan üst ve bu değer devralan alt nesne hem de olması gerekir FrameworkElement veya FrameworkContentElement, ve bunların her ikisi de mantıksal bazı ağaç. parçası olması gerekir Ancak, özellik devralma destekleyen varolan wpf özellikleri, özellik değeri devralma mantıksal ağaç olmayan aradaki nesne üzerinden perpetuate sağlayamamaktadır. Çoğunlukla bu şablonu öğeleri ayarlama şablonu esas alan ya da örnek üzerinde tüm devralınan özellik değerlerini kullanmak zorunda veya sayfa düzeyinde kompozisyon hala yüksek düzeylerde ilgili ve mantıksal ağaç, bu nedenle daha yüksek olur. Böyle bir sınırı boyunca tutarlı bir şekilde çalışmak özellik değeri devralma için sırasıyla miras özelliği iliştirilmiş bir özellik olarak kaydedilmiş olması gerekir ve özel bağımlılık özelliği özellik devralma davranışı ile tanımlamak istiyorsanız, bu desen uygulamalısınız. Özellik devralma için kullanılan tam ağaç tamamen yardımcı sınıfı yardımcı program yöntemi tarafından bile zamanında beklenen olamaz. For more information, see Özellik Değeri Kalıtımı.

Görsel ağaç

Mantıksal ağaç kavramını yanı sıra, ayrıca vardır kavramını visual ağaç , WPF. Görsel ağaç gösterdiği gibi görsel nesneler yapısını tanımlayan Visual temel sınıfa Bir denetim için bir şablon yazdığınızda, tanımlama veya bu denetim için geçerli visual ağacı yeniden tanımlama. Görsel de performans ve en iyi duruma getirme nedeniyle çizim üzerinde alt düzey denetim isteyen geliştiriciler için ilgi ağacıdır. Görsel ağacının bir parçası olarak Geleneksel bir Pozlama WPF uygulama programlama ise bu olay için yönlendiren bir olay yönlendirmeli çoğunlukla görsel ağacı, mantıksal ağaç birlikte seyahat. Denetim Yazar değilseniz bu subtlety yönlendirilen olay davranış hemen görüntülenmeyebilecek. Görsel ağaç içinde olayları yönlendirme olaylarını işlemek veya olay ayarlayıcılar oluşturmak için visual düzeyinde kompozisyon uygulayan denetimleri sağlar.

Ağaçları, öğeleri içerik ve ana içerik

İçerik öğelerini (türetilmeli sınıfları ContentElement); görsel ağaç parçası olmayan den devralmaz Visual ve yok görsel bir gösterimini. Hiç bir kullanıcı arabiriminde görünür için bir ContentElement her ikisi de olan bir içerik ana barındırılan bir Visual ve bir mantıksal ağaç katılımcı. Genellikle böyle bir nesne olan bir FrameworkElement. İçerik ana çizelge "Tarayıcı" gibi olduğunu conceptualize İçerik ve nasıl görüntüleneceğini denetleyen ana ekran bölgesi içeriğini seçer. İçeriği barındırılıyorsa, içeriği normalde görsel ağaç ile ilişkili bazı ağaç işlemleri katılımcıyı yapılabilir. Genellikle FrameworkElement ana sınıfı içerir herhangi barındırılan ekler uygulama kodu ContentElement İçerik mantıksal ağaç düğümlerini olay rotasını bile barındırılan içerik sağlamaktır parçası doğru görsel ağaç. Bu gereklidir, bir ContentElement , kendisi dışındaki herhangi bir öğe için yönlendiren yönlendirilmiş bir olay kaynağı.

Ağaç çapraz geçişi

LogicalTreeHelper Sınıfı sağlar GetChildren, GetParent, ve FindLogicalNode yöntemleri için mantıksal ağaç geçişi. Bu denetimleri, hemen her zaman kendi mantıksal alt öğeler koleksiyonu erişim gibi destekleyen adanmış koleksiyonu özelliği olarak kullanır çünkü çoğu zaman, varolan denetimlerin mantıksal aðaçta gerekmeyecektir Add, bir dizinleyici ve benzeri. Ağaç Geçişi'nin esas olarak hedeflenen denetim desenlerden gibi türemesine değil seçen denetim yazarlar tarafından kullanılan bir senaryo olduğu ItemsControl veya Panel burada koleksiyon özellikleri önceden tanımlanmıştır, ve kimin düşündüğünüz sağlamaya yönelik kendi koleksiyonu özellik desteği.

Görsel ağaç görsel ağaç geçişi için de yardımcı sınıfını destekler VisualTreeHelper. Görsel ağaç gibi rahat denetim özgü özellikler'inde maruz kalmaz bu nedenle VisualTreeHelper sınıftır Gez görsel programlama senaryosu gerekli olduğunda ağaç için önerilen yol For more information, see WPF Grafik İşleme Genel Bakış.

NotNot

Bazen uygulanan bir şablon görsel ağacının incelemek gereklidir.Bu tekniği kullanırken dikkatli olmalıdır.Görsel bir ağaç denetimi için şablon tanımladığınız geçme olsa bile, Tüketiciler, denetimin her zaman şablon ayarlayarak değiştirebilirsiniz Template örnekler, özelliği ve hatta son kullanıcıya uygulanan şablon değiştirerek etkileyensistem tema.

"Ağaç" olarak yönlendirilmiş olaylar için yollar

Önce de belirtildiği gibi herhangi bir belirli yönlendirilmiş olay rotasında bir görsel ve mantıksal ağaç temsili karması olan bir ağaç tek ve önceden belirlenmiş yol boyunca hareket eder. Aşağı yönde olup bağlı ağaç içindeki olay bir tünel veya kabarcıklanma yönlendirilebilir veya olay ya da Yukarı yönlendirmede. Olay yol kavramı "Yürüyüş" kullanılabilir doğrudan destekleyen bir yardımcı sınıf yok. Aslında yönlendiren bir olayý çaðýrmak bağımsız olarak olay yol. Yol gösteren bir sınıf yok EventRoute, ancak bu sınıfın yöntemleri genellikle yalnızca dahili kullanım içindir.

Kaynak sözlükler ve ağaçları

Tüm kaynak sözlük arama Resources tanımlı bir sayfanın temel mantıksal ağaç. erişir Mantıksal ağaç olmayan nesneleri anahtarlı kaynaklara başvurabilirsiniz, ancak bu nesne için mantıksal ağaç bağlandığı noktada kaynak arama sırası başlar. wpf yalnızca mantıksal ağaç düğümü olabilir bir Resources içeren özelliği bir ResourceDictionary, bu nedenle anahtarlı kaynaklardan arayan görsel ağacı tersine çevirme de hiçbir yararı yoktur bir ResourceDictionary.

Bununla birlikte, kaynak arama hemen mantıksal ağaç genişletebilirsiniz. Uygulama biçimlendirme için kaynak arama sonra ileriye doğru uygulama düzeyinde kaynak sözlükler ve statik özelliklere ya da anahtarlar başvurulan tema desteği ve sistem değerleri devam edebilirsiniz. Kaynak dinamik ise kendilerini temalar tema mantıksal ağaç dışında sistem değerleri de baþvurabilirsiniz. Kaynak sözlükler ve arama mantığı ile ilgili daha fazla bilgi için bkz: Kaynaklara Genel Bakış.

Ayrıca bkz.

Kavramlar

Giriş Genel Bakış

WPF Grafik İşleme Genel Bakış

Yönlendirilmiş Olaylara Genel Bakış

Nesne Ağacında Olamayan Nesne Öğelerinin Başlatılması

WPF Mimarisi