Aracılığıyla paylaş


WPF XAML Ad Kapsamları

xaml namescopes tanımlayan bir kavram xaml tarafından tanımlanan nesneleri ' dir. xaml namescope adları nesne ağacında nesneleri xaml tanımlı adları ve bunların örneği eşdeğerleri arasında ilişki kurmak için kullanılabilir. Genellikle, xaml namescopes de WPF yönetilen kod oluşturulmuş sırasında yükleniyor bağımsız xaml sayfasına kökleri bir xaml uygulaması. xaml namescopes programlama nesnesi tarafından tanımlanan INameScope arabirim ve pratik sınıfı tarafından da olarak uygulanır NameScope.

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

  • Yüklenen xaml uygulamalarında Namescopes
  • xaml Namescopes stilleri ve şablonlar
  • xaml Namescopes ve adı ilgili API'ler
  • İlgili Konular

Yüklenen xaml uygulamalarında Namescopes

Daha geniş programlama veya bilgisayar bilimi bağlamında, programlama kavramları çoğunlukla ilkesini benzersiz tanımlayıcı veya bir nesneye erişmek için kullanılan adı içerir. Tanımlayıcıları veya adlarını kullanan sistemler için namescope sınırları içinde tanımlayan nesne adının isteniyorsa, bir işlem veya teknik arama veya müşteriyle benzersiz adları tanımlama zorlanan sınırları. Bu genel ilkelerin xaml namescopes için doğrudur. Sayfa yüklendiğinde wpf xaml namescopes xaml sayfası için kök öğesi oluşturulur. Sayfa kökte başlayan xaml sayfa içinde belirtilen her ad için kalıcı bir xaml namescope eklenir.

wpf xaml, yaygın kök öğeleri olan öğeler de (gibi Page, ve Window) her zaman bir xaml namescope. kontrol Bir öğe gibi FrameworkElement veya FrameworkContentElement biçimlendirme, sayfa bir kök öğenin bulunduğu bir XAML İşlemci ekler bir Page örtülü olarak kök böylece Page sağlayan bir çalışma xaml namescope.

NotNot

wpf yapı eylemleri xaml üretim için xaml namescope olmasa hiçbir oluşturmak Name veya x:Name öznitelikler herhangi bir öğe üzerinde tanımlı XAML işaretleme.

Tüm xaml namescope iki kez aynı adı kullanmayı denerseniz, bir özel durum oluşturuldu. wpf arka planda ve derlenmiş bir uygulama parçası olan xaml için özel durum oluşturma zamanında wpf yapı eylemleri tarafından ilk işaretleme derleme sırasında oluşturulan sınıf sayfası oluştururken, oluşturuldu. xaml yüklendiğinde herhangi bir yapı eylem işaretleme derlenmiş değil xaml xaml namescope sorunlarıyla ilgili özel durumlar yükseltilmiş olması. xaml tasarımcıları tasarım zamanında xaml namescope sorunlar tahmin.

Çalışma zamanı nesne ağaçları nesneler ekleme

xaml ayrıştırılır moment wpf xaml namescope oluşturulan ve tanımlanan zaman birazdan temsil eder. Bir nesnenin nesne ağacında bir noktada o ağaç üretilen xaml ayrıştırıldıktan sürede eklerseniz bir Name veya x:Name değeri yeni bir nesne üzerinde otomatik olarak güncelleştirme bilgileri xaml namescope. xaml yüklendikten sonra wpf xaml namescope bir nesne için bir ad eklemek için uygun uygulaması çağırmalısınız RegisterName nesnesinde xaml namescope olduğu tanımlargenellikle xaml sayfasına kök. Adı kayıtlı değil, eklenen nesne adıyla yöntemleri gibi başvurulamaz FindName, ve animasyon hedefleme için bu adı kullanamazsınız.

En yaygın uygulama geliştiricileri için kullanacağınız senaryodur RegisterName kaydettirmek adlarına xaml namescope geçerli kök sayfa. RegisterNameBu hedef nesnelere animasyonlar için bir mportant senaryo için animasyonlarıyla parçasıdır. For more information, see Film Şeritlerine Genel Bakış.

Çağırırsanız, RegisterName xaml namescope tanımlayan nesne farklı bir nesne adı hala kayıtlı çağıran nesne tutulmadığını, içindeki gibi adlı xaml namescope için RegisterName xaml namescope tanımlayan nesne.

xaml Namescopes kodu

Oluşturun ve xaml namescopes kodunu kullanın. API'ları ve xaml namescope oluşturmada kullanılan kavramlar bile bir saf kod kullanımı için aynı olduğu için xaml İşlemci WPF kendisini xaml işlerken bu API'leri ve kavramları kullanır. Kavramlar ve API çoğunlukla nesneler genellikle kısmen veya tamamen xaml içinde tanımlanan bir nesne ağacı içinde ada göre Bul çalışabilme amacıyla mevcut.

Program aracılığıyla oluşturulan uygulamalar için ve yüklenen xaml değil, xaml namescope tanımlayan nesne uygulamalıdır INameScope, ya da bir FrameworkElement veya FrameworkContentElement için xaml namescope kendi örneklerini oluşturulmasını destekleyen sınıf türetilmiş

Ayrıca, değil yüklenen ve xaml işlemcisi tarafından işlenen herhangi bir öğe için nesnenin xaml namescope değil oluşturulduğunda veya varsayılan olarak başlatıldı. Açıkça yeni bir xaml namescope adlarına sonradan kaydettirmek istediğiniz herhangi bir nesnesi oluşturmanız gerekir. xaml namescope oluşturmak için statik çağrısı SetNameScope yöntemi. Olarak kendi nesne belirtmek dependencyObject parametresi ve yeni NameScope oluşturucu çağrısı olarak value parametresi.

Nesne olarak sağlanmışsa dependencyObject için SetNameScope değil bir INameScope uygulaması, FrameworkElement veya FrameworkContentElement, çağrı RegisterName tüm alt öğeleri vardır hiçbir etkisi. Yeni xaml namescope açıkça oluşturmak başarısız olursa, daha sonra çağrıları RegisterName yükseltmek bir özel durum.

Kod xaml namescope API'lerini kullanarak örnek için bkz: Nasıl Yapılır: Ad Kapsamı Tanımlama.

xaml Namescopes stilleri ve şablonlar

Stilleri ve şablonlar WPF sağlama yeteneği yeniden ve yeniden içerik, basit bir yolu. Ancak, stilleri ve şablonları da öğeleri şablon düzeyinde tanımlanan xaml adlarla içerebilir. Aynı şablon bir sayfada birden çok kez kullanılabilir. Bu nedenle, kendi xaml namescopes, stil veya şablonun uygulanacağı yeri ne olursa olsun bir Nesne Ağacı'ndaki konumdan bağımsız stilleri ve şablonları tanımlayın.

Consider the following example:

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  >
  <Page.Resources>
    <ControlTemplate x:Key="MyButtonTemplate" TargetType="{x:Type Button}">
      <Border BorderBrush="Red" Name="TheBorder" BorderThickness="2">
        <ContentPresenter/>
      </Border>      
    </ControlTemplate>
  </Page.Resources>
  <StackPanel>
    <Button Template="{StaticResource MyButtonTemplate}">My first button</Button>
    <Button Template="{StaticResource MyButtonTemplate}">My second button</Button>
  </StackPanel>
</Page>

Burada, iki farklı düğmelere aynı şablon uygulanır. Şablonlar bağımsız xaml namescopes yoksa TheBorder ada şablonda kullanılan ad çakışmasıyla xaml namescope neden Her örneğini oluşturmada şablonun kendi xaml namescope bulunduğundan bu örnekte oluşturulmuş her şablonun xaml namescope tam olarak bir ad içerir.

Çoğunlukla animasyonlarıyla bölümlerini atanan belirli adlar böylece stilleri de kendilerine ait xaml namescope tanımlar. Şablon denetimini özelleştirme bir parçası olarak re-defined bile, bu adlar, bu adı öğeleri hedefleyecektir denetimi belirli davranışlar etkinleştirin.

Nedeniyle ayrı xaml bir oluşturulmamış bir sayfa öğesinde adlı bulmak çok daha zorlu bir şablonda adlandırılmış öğeleri bulma namescopes. Önce alma uygulanan şablon belirlemek gerekir Template şablonun uygulanacağı yeri denetimin özellik değerinin. Daha sonra şablon sürümünü çağırmak FindName, iletme denetimi burada şablonu uygulandığı olarak ikinci bir parametre.

Denetim yazar ve uygulanan bir şablon öğesinde adlı belirli bir denetim tarafından tanımlanan bir davranış için hedef olduğu bir kuralı üretiyorsanız, kullanabileceğiniz GetTemplateChild yöntemi, Denetim uygulama kodu. GetTemplateChild Yöntemi korunur, böylece yalnızca denetim Yazar erişebileceğini it.

Değeri, bir şablon ve xaml namescope şablonun uygulanacağı yeri almak için gerek içinde çalışıyorsanız, Al TemplatedParentve sonra call FindName vardır. Şablon içinde çalışma örnek olay işleyicisi uygulama yazıyorsanız, burada olay bir öğeden uygulanan bir şablon içinde gerçekleştiğini olacaktır.

xaml Namescopes ve adı ilgili API'ler

FrameworkElementhas FindName, RegisterName and UnregisterName methods. xaml namescope üzerinde bu yöntemleri çağırmak nesnenin sahibi, ilgili xaml namescope yöntemleri yöntemleri çağırın. Aksi halde, xaml namescope sahibi olan ve bu işlem bir xaml namescope bulunana kadar yinelemeli olarak devam eder görmek için üst öğe denetlenir (xaml işlemci davranış nedeniyle, orada garanti xaml namescope kök olarak). FrameworkContentElementözel durum ile benzer davranışlar vardır, hiçbir FrameworkContentElement , bugüne kadar kendi bir xaml namescope. Yöntemleri üzerinde mevcut FrameworkContentElement görüşmeleri sonunda çok iletilecek şekilde bir FrameworkElement üst öğesi.

SetNameScopeVarolan bir nesneye yeni bir xaml namescope eşlemek için kullanılır. Arayabileceğiniz SetNameScope birden çok kez sıfırlamak veya xaml temizlemek için namescope, ancak olan yaygın bir kullanım değil. Ayrıca, GetNameScope değil genellikle kullanılan kod.

xaml Namescope uygulamaları

Aşağıdaki sınıfları gerçekleştir INameScope doğrudan:

ResourceDictionaryxaml adları veya namescopes kullanmaz; Sözlük uygulaması olduğu için bunun yerine anahtarları kullanır. Tek nedeni ResourceDictionary uygulayan INameScope , gerçek bir xaml namescope arasındaki fark daha açık hale getirmek için özel durumlar kullanıcı kodu yükseltebilirsiniz olacak ve nasıl bir ResourceDictionary tuşları, işleme ve xaml namescopes için uygulanmaz da sağlanması için bir ResourceDictionary tarafından üst öğeleri.

FrameworkTemplateve Style uygulamak INameScope üzerinden açık arabirim tanımları. Açık uygulamaları bu xaml namescopes ne zaman onlar erişilir geleneksel olarak davranmasına izin INameScope olan xaml namescopes nasıl iletildiğini arabirimi tarafından WPF iç işlemler. Ancak açık arabirim tanımları geleneksel API yüzeyine bir parçası olmayan FrameworkTemplate ve Style, çünkü nadiren aramanız gereken INameScope yöntemleri FrameworkTemplate ve Style , doğrudan ve bunun yerine kullandığınız diğer API gibi GetTemplateChild.

Aşağıdaki sınıfları kullanarak kendi xaml namescope tanımlayın System.Windows.NameScope yardımcı sınıfı ve xaml namescope uygulaması bağlanan NameScope.NameScope özelliği eklenmiş:

Ayrıca bkz.

Başvuru

x: ad yönergesi

Kavramlar

WPF XAML İçin XAML Ad Uzayları ve Ad Uzayı Eşlemesi