WPF XAML için XAML Ad Alanları ve Ad Alanı Eşlemesi
Bu konu başlığında, WPF XAML dosyasının kök etiketinde sıklıkla bulunan iki XAML ad alanı eşlemesinin varlığı ve amacı açıklanmaktadır. Ayrıca, kendi kodunuzda ve/veya ayrı derlemelerde tanımlanan öğeleri kullanmak için benzer eşlemelerin nasıl üretildiğini açıklar.
XAML Ad Alanı nedir?
XAML ad alanı, xml ad alanı kavramının bir uzantısıdır. XAML ad alanı belirtme teknikleri, XML ad alanı söz dizimini, URI'leri ad alanı tanımlayıcıları olarak kullanma kuralını, aynı işaretleme kaynağından birden çok ad alanına başvurmak için bir araç sağlamak için ön ekleri kullanma kuralını kullanır. XML ad alanının XAML tanımına eklenen birincil kavram, XAML ad alanının hem işaretleme kullanımları için benzersizlik kapsamını hem de işaretleme varlıklarının belirli CLR ad alanları ve başvurulan derlemeler tarafından nasıl desteklenebileceklerini etkilemesidir. Bu ikinci değerlendirme, XAML şema bağlamı kavramından da etkilenir. Ancak WPF'nin XAML ad alanlarıyla nasıl çalıştığına ilişkin amaçlar doğrultusunda genellikle XAML ad alanlarını varsayılan XAML ad alanı, XAML dili ad alanı ve XAML işaretlemeniz tarafından doğrudan belirli yedekleme CLR ad alanlarına ve başvurulan derlemelere eşlenen diğer XAML ad alanları olarak düşünebilirsiniz.
WPF ve XAML Ad Alanı Bildirimleri
Birçok XAML dosyasının kök etiketindeki ad alanı bildirimleri içinde genellikle iki XML ad alanı bildirimi olduğunu görürsünüz. İlk bildirim, genel WPF istemci / çatı XAML ad alanını varsayılan olarak tanımlar:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
İkinci bildirim, ayrı bir XAML ad alanını eşler ve bunu (genellikle) x:
ön ekine eşler.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Bu bildirimler arasındaki ilişki, x:
ön ek eşlemesinin XAML dil tanımının parçası olan iç bilgileri desteklemesi ve WPF'nin XAML'yi dil olarak kullanan ve XAML için nesnelerinin sözcük dağarcığını tanımlayan bir uygulama olmasıdır. WPF kelime dağarcığının kullanımları XAML iç kullanımlarından çok daha yaygın olduğundan, WPF sözlüğü varsayılan olarak eşlenir.
XAML dili iç desteğini eşlemeye yönelik x:
ön ek kuralını proje şablonları, örnek kod ve bu SDK'daki dil özelliklerinin belgeleri izler. XAML ad alanı, temel WPF uygulamaları için bile gerekli olan yaygın olarak kullanılan birçok özelliği tanımlar. Örneğin, kısmi bir sınıf aracılığıyla bir XAML dosyasına arka planda kod eklemek için ilgili XAML dosyasının kök öğesinde bu sınıfı x:Class
özniteliği olarak adlandırmanız gerekir. Veya anahtarlı kaynak olarak erişmek istediğiniz bir XAML sayfasında tanımlanan herhangi bir öğenin söz konusu öğede ayarlanmış x:Key
özniteliği olmalıdır. XAML'nin bu ve diğer yönleri hakkında daha fazla bilgi için bkz. WPF'de
Özel Sınıflar ve Derlemelere Eşleştirme
Standart WPF ve yerleşik XAML ad alanlarının ön eklere eşlenmesine benzer şekilde, XML ad alanlarını bir xmlns
ön ek bildirimi içinde bir dizi belirteç kullanarak derlemelere eşleyebilirsiniz.
Sözdizimi, olası adlandırılmış belirteçleri ve değerleri aşağıdaki gibi kullanır:
clr-namespace:
Öğe olarak kullanıma sunma amacıyla ortak türleri içeren derleme içinde bildirilen CLR ad alanı.
assembly=
Başvurulan CLR ad alanının bir kısmını veya tümünü içeren derleme. Bu değer genellikle yolu değil yalnızca derlemenin adıdır ve uzantıyı (.dll veya .exegibi) içermez. Bu derlemenin yolu, eşlemeye çalıştığınız XAML'yi içeren proje dosyasında proje başvurusu olarak oluşturulmalıdır. Sürüm oluşturma ve güçlü ad imzalama işlemlerini birleştirmek için, assembly
değeri, basit bir dize adı yerine AssemblyNametarafından tanımlanan bir dize olabilir.
clr-namespace
belirteciyle değerini ayıran karakterin iki nokta (:) olduğunu, assembly
belirteciyle değerini ayıran karakterin ise eşittir işareti (=) olduğunu unutmayın. Bu iki belirteç arasında kullanılacak karakter noktalı virgüldür. Ayrıca, bildirimde hiçbir yere boşluk eklemeyin.
Temel Özel Eşleme Örneği
Aşağıdaki kod örnek bir özel sınıf tanımlar:
namespace SDKSample {
public class ExampleClass : ContentControl {
public ExampleClass() {
...
}
}
}
Namespace SDKSample
Public Class ExampleClass
Inherits ContentControl
...
Public Sub New()
End Sub
End Class
End Namespace
Daha sonra bu özel sınıf, proje ayarlarına göre (gösterilmez) SDKSampleLibrary
olarak adlandırılan bir kitaplıkta derlenmiş olur.
Özel sınıfa referans yapmak için, bu sınıfı genellikle Visual Studio'daki Çözüm Gezgini kullanıcı arayüzünü kullanarak mevcut projenizin bir referansı olarak eklemeniz gerekmektedir.
Artık sınıf içeren bir kitaplığınız ve proje ayarlarında buna bir başvurunuz olduğuna göre, XAML'de kök öğenizin bir parçası olarak aşağıdaki ön ek eşlemesini ekleyebilirsiniz:
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
Hepsini bir araya getirmek için, kök etiketinde tipik varsayılan ve x: eşlemelerinin yanı sıra özel eşlemeyi içeren XAML kodu aşağıda verilmiştir; ve ardından bu kullanıcı arabiriminde ExampleClass
'ı başlatmak için ön ekli bir referans kullanır:
<Page x:Class="WPFApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary">
...
<custom:ExampleClass/>
...
</Page>
Geçerli Derlemelere Eşleme
assembly
, başvuruda bulunılan clr-namespace
özel sınıflara başvuran uygulama koduyla aynı derlemede tanımlanıyorsa atlanabilir. Ya da bu durum için eşdeğer bir söz dizimi, eşittir işaretinden sonra dize belirteci olmadan assembly=
belirtmektir.
Özel sınıflar, aynı derlemede tanımlanmışsa sayfanın kök öğesi olarak kullanılamaz. Kısmi sınıfların eşleştirilmesi gerekmez; yalnızca, uygulamanızdaki bir sayfanın kısmi sınıfı olmayan sınıfların XAML'de öğe olarak referans alınmasını istiyorsanız eşleştirilmesi gerekir.
CLR Adalanlarını Bir Derlemede XML Adalanlarına Eşleme
WPF, birden çok CLR ad alanını tek bir XAML ad alanına eşlemek için XAML işlemcileri tarafından kullanılan bir CLR özniteliğini tanımlar.
XmlnsDefinitionAttributebu öznitelik, derlemeyi oluşturan kaynak kodunda derleme düzeyinde yerleştirilir. WPF derleme kaynak kodu, System.Windows ve System.Windows.Controlsgibi çeşitli ortak ad alanlarını http://schemas.microsoft.com/winfx/2006/xaml/presentation
ad alanına eşlemek için bu özniteliği kullanır.
XmlnsDefinitionAttribute iki parametre alır: XML/XAML ad alanı adı ve CLR ad alanı adı. Birden çok CLR ad alanını aynı XML ad alanına eşlemek için birden fazla XmlnsDefinitionAttribute bulunabilir. Eşlendikten sonra, kısmi sınıf kod arkası sayfasında uygun using
deyimi sağlanarak istenirse bu ad alanlarının üyelerine tam niteleme olmadan da başvurulabilir. Diğer ayrıntılar için bkz. XmlnsDefinitionAttribute.
XAML Şablonlarından Tasarımcı Ad Alanları ve Diğer Ön Ekler
WPF XAML için geliştirme ortamları ve/veya tasarım araçlarıyla çalışıyorsanız, XAML işaretlemesinde başka tanımlı XAML ad alanları / ön ekleri olduğunu fark edebilirsiniz.
Visual Studio için WPF Tasarımcısı, genellikle d:
ön ekine eşlenen bir tasarımcı ad alanı kullanır. WPF için daha yeni proje şablonları, Visual Studio için WPF Tasarımcısı ile diğer tasarım ortamları arasında XAML değişimini desteklemek için bu XAML ad alanını önceden eşler. Bu tasarım XAML ad alanı, tasarımcıda XAML tabanlı kullanıcı arabirimi geçişleri sırasında tasarım durumunu korumak için kullanılır.
d:IsDataSource
gibi tasarımcıda çalışma zamanı veri kaynaklarını etkinleştiren özellikler için de kullanılır.
Başka bir eşlenmiş önek olarak görebileceğiniz mc:
da var.
mc:
işaretleme uyumluluğuna yöneliktir ve XAML'ye özgü olması gerekmeyen bir işaretleme uyumluluk düzeninden yararlanır. Bir ölçüde, işaretleme uyumluluk özellikleri çerçeveler arasında veya yedekleme uygulamasının diğer sınırları arasında XAML değişimi yapmak, XAML şema bağlamları arasında çalışmak, tasarımcılarda sınırlı modlar için uyumluluk sağlamak vb. için kullanılabilir. İşaretleme uyumluluğu kavramları ve bunların WPF ile ilişkisi hakkında daha fazla bilgi için bkz. İşaretleme Uyumluluğu (mc:) Dil Özellikleri.
WPF ve Bütünleyici Yükleme
WPF için XAML şema bağlamı WPF uygulama modeliyle tümleşir ve bu model de CLR tanımlı AppDomainkavramını kullanır. Aşağıdaki dizide, AppDomain ve diğer faktörlerin WPF kullanımına bağlı olarak XAML şema bağlamının, derlemeleri yükleme veya çalışma ya da tasarım zamanında türleri bulma süreçlerini nasıl yorumladığı açıklanmaktadır.
AppDomainüzerinde, en son yüklenmiş derlemeden başlayarak, ismin tüm yönleriyle eşleşen önceden yüklenmiş bir derlemeyi arayarak yineleyin.
İsim nitelenmişse, nitelenmiş isim üzerinde Assembly.Load(String) çağrı yapın.
Nitelenmiş bir adın kısa adı ve ortak anahtar belirteci, işaretlemenin yüklendiği derlemeyle eşleşiyorsa, bu derlemeyi döndürün.
Assembly.Load(String)çağırmak için kısa ad + ortak anahtar belirtecini kullanın.
İsim niteliksizse Assembly.LoadWithPartialName'i arayın.
Loose XAML 3. Adımı kullanmaz; yükleme-from derlemesi yok.
WPF için derlenmiş XAML (XamlBuildTask aracılığıyla oluşturulur), AppDomain 'dan önceden yüklenmiş derlemeleri kullanmaz (1. Adım). Ayrıca, adın XamlBuildTask çıkışından hiçbir zaman niteliği kaldırılmaması gerekir, bu nedenle 5. Adım geçerli değildir.
Derlenmiş BAML (PresentationBuildTask aracılığıyla oluşturulur) tüm adımları kullanır, ancak BAML de nitelenmemiş derleme adları içermemelidir.
Ayrıca bkz.
- XML Ad Alanlarını Anlama
- WPF'de XAML
.NET Desktop feedback