x:Key Yönergesi
XAML tanımlı bir sözlükte oluşturulan ve başvuruda bulunılan öğeleri benzersiz olarak tanımlar. Bir XAML nesne öğesine x:Key
değeri eklemek, bir kaynak sözlüğündeki bir kaynağı tanımlamanın en yaygın yoludur, örneğin wpf ResourceDictionary.
XAML Öznitelik Kullanımı
<object x:Key="stringKeyValue".../>
-or-
<object x:Key="{markupExtensionUsage}".../>
XAML Öznitelik Kullanımı (WPF'ye özgü)
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
-or-
<object.Resources>
<object x:Key="{markupExtensionUsage}".../>
</object.Resources>
XAML Değerleri
Değer | Açıklama |
---|---|
stringKeyValue |
Anahtar olarak kullanılacak metin dizesi. Metin dizesi XamlName Dilbilgisiuygun olmalıdır. |
markupExtensionUsage |
{}işaretleme uzantısı sınırlayıcıları içinde, anahtar olarak kullanılacak bir nesne sağlayan bir işaretleme uzantısı kullanımı. Bkz. Açıklamalar. |
Açıklamalar
x:Key
XAML kaynak sözlüğü kavramını destekler. Dil olarak XAML, belirli kullanıcı arabirimi çerçevelerine bırakılan bir kaynak sözlüğü uygulaması tanımlamaz. XAML kaynak sözlüklerinin WPF'de nasıl uygulandığı hakkında daha fazla bilgi edinmek için bkz. XAML kaynaklarına genel bakış (WPF .NET).
XAML 2006 ve WPF'de x:Key
bir öznitelik olarak sağlanmalıdır. Dize olmayan anahtarları kullanmaya devam edebilirsiniz, ancak bunun için öznitelik biçiminde dize olmayan değeri sağlamak için bir işaretleme uzantısı kullanımı gerekir. XAML 2009 kullanıyorsanız, x:Key
bir öğe olarak belirtilebilir; işaretleme uzantısı ara gerektirmeden dizeler dışındaki nesne türleri tarafından anahtarlanan sözlükleri açıkça desteklemek için. Bu konudaki "XAML 2009" bölümüne bakın. Açıklamalar bölümünün geri kalanı özellikle XAML 2006 uygulaması için geçerlidir.
x:Key
öznitelik değeri, XamlName Grammar tanımlanan herhangi bir dize olabileceği gibi, işaretleme uzantısı aracılığıyla değerlendirilen bir nesne de olabilir. WPF'den bir örnek için bkz. "WPF Kullanım Notları".
IDictionary bir uygulama olan üst öğenin alt öğeleri genellikle sözlüğe benzersiz bir anahtar değeri belirten bir x:Key
özniteliği içermelidir. Çerçeveler, belirli türlerdeki x:Key
yerine diğer adla alınan anahtar özellikleri uygulayabilir; bu tür özellikleri tanımlayan türler DictionaryKeyPropertyAttributeile ilişkilendirilmelidir.
x:Key
belirtmenin kod eşdeğeri, temel IDictionaryiçin kullanılan anahtardır. Örneğin, WPF'deki bir kaynak için işaretlemeye uygulanan bir x:Key
, kaynağı koddaki bir WPF ResourceDictionary eklediğinizde ResourceDictionary.Addkey
parametresinin değerine eşdeğerdir.
WPF Kullanım Notları
WPF ResourceDictionarygibi bir IDictionary uygulaması olan üst nesnenin alt nesneleri genellikle bir x:Key
özniteliği içermelidir ve anahtar değeri bu sözlük içinde benzersiz olmalıdır. İki önemli özel durum vardır:
Bazı WPF türleri sözlük kullanımı için örtük bir anahtar bildirir. Örneğin, TargetTypeiçeren bir Style veya DataTypeolan bir DataTemplateResourceDictionary olabilir ve örtük anahtarı kullanabilir.
WPF, birleştirilmiş kaynak sözlüğü kavramını destekler. Anahtarlar birleştirilmiş sözlükler arasında paylaşılabilir ve paylaşılan anahtar davranışına FindResourcekullanılarak erişilebilir. Daha fazla bilgi için bkz. Birleştirilmiş kaynak sözlükleri.
Genel WPF XAML uygulama ve uygulama modelinde anahtar benzersizliği XAML işaretleme derleyicisi tarafından denetlenmiyor. Bunun yerine, eksik veya nonunique x:Key
değerleri yük süresi XAML ayrıştırıcı hatalarına neden olur. Bununla birlikte, WPF için sözlüklerin Visual Studio işlemesi genellikle tasarım aşamasında bu tür hataları not edebilir.
Gösterilen söz diziminde, ResourceDictionary nesnesinin WPF XAML işlemcisinin bir Resources koleksiyonunu doldurmak için bir koleksiyon oluşturma biçiminde örtük olduğunu unutmayın. ResourceDictionary genellikle işaretlemede açıkça bir öğe olarak sağlanmaz, ancak bazı durumlarda netlik için istenebilir (Resources özellik öğesi ile sözlüğü dolduran öğeler arasında bir koleksiyon nesnesi öğesi olabilir). Bir koleksiyon nesnesinin neden işaretlemede neredeyse her zaman örtük bir öğe olduğu hakkında bilgi için bkz. XAML Söz Dizimi Ayrıntılı.
WPF XAML uygulamasında, kaynak sözlük anahtarlarının işlenmesi ResourceKey soyut sınıfı tarafından tanımlanır. Ancak WPF XAML işlemcisi, kullanımlarına göre anahtarlar için farklı temel uzantı türleri oluşturur. Örneğin, bir DataTemplate veya türetilmiş herhangi bir sınıfın anahtarı ayrı olarak işlenir ve ayrı bir DataTemplateKey nesnesi oluşturur.
Anahtarlar ve adlar, temel XAML tanımında farklı yönergeler ve dil öğeleri (x:Key
ve x:Name
) kullanır. Anahtarlar ve adlar, bu kavramların WPF tanımı ve uygulaması tarafından farklı durumlarda da kullanılır. Ayrıntılar için bkz. WPF XAML Ad Kapsamları.
Daha önce belirtildiği gibi, bir anahtarın değeri bir işaretleme uzantısı aracılığıyla sağlanabilir ve dize değerinden farklı olabilir. Örnek bir WPF senaryosu, x:Key
değerinin ComponentResourceKeyolmasıdır. Bazı denetimler, stili tamamen değiştirmeden bu denetimin görünümünün ve davranışının bir kısmını etkileyen özel bir stil kaynağı için bu türdeki bir stil anahtarını kullanıma sunar. Bu tür bir anahtara örnek olarak ButtonStyleKey.
WPF birleştirilmiş sözlük özelliği, anahtar benzersizliği ve anahtar arama davranışı için dikkat edilmesi gereken ek noktalara sahiptir. Daha fazla bilgi için bkz. Birleştirilmiş kaynak sözlükleri.
XAML 2009
XAML 2009, her zaman öznitelik biçiminde x:Key
kısıtlamayı gevşetir.
WPF'de XAML 2009 özelliklerini kullanabilirsiniz, ancak yalnızca işaretleme derlenmemiş XAML için kullanabilirsiniz. WPF için işaretlemeyle derlenmiş XAML ve XAML'nin BAML biçimi şu anda XAML 2009 anahtar sözcüklerini ve özelliklerini desteklememektedir.
XAML 2009 altında, aşağıdaki kullanım aracılığıyla x:Key
öğeleri belirtebilirsiniz:
XAML Öğesi Kullanımı (yalnızca XAML 2009)
<object>
<x:Key>
keyObject
</x:Key>
...
</object>
XAML Değerleri
Değer | Açıklama |
---|---|
keyObject |
Özel bir sözlükteki belirli bir object için anahtar olarak kullanılan nesnenin nesne öğesi. |
Bu tür kullanım için kapsayıcı/üst öğe burada gösterilmez.
object
özel sözlük uygulamasını temsil eden bir nesne öğesinin alt öğesi olması beklenir.keyObject
, söz konusu özel sözlük uygulaması için anahtar olarak uygun bir nesne örneği (veya değer türü değeri) olması beklenir.WPF bu kullanımı gerektiren sözlükleri uygulamaz. Nesne anahtarları daha çok XAML dilinin genel bir özelliğidir ve XAML'de sözlüğün oluşturulmasının istendiği belirli özel sözlük senaryoları için yararlı olabilir. Kaynaklar için dize olmayan anahtarları kullanan örtük stiller gibi WPF özellikleri için, anahtarları oluşturmak veya belirtmek için başka teknikler vardır, bu nedenle nesne anahtarı kullanmak gerekli değildir.
keyObject
, doğrudan nesne örneği yerine nesne öğesi formundaki bir işaretleme uzantısı kullanımı da olabilir.
Silverlight Kullanım Notları
Silverlight için x:Key
ayrı olarak belgelenmiştir. Daha fazla bilgi için bkz. XAML Ad Alanı (x:) Dil Özellikleri (Silverlight).
Ayrıca bkz.
- XAML kaynaklarına (WPF .NET) genel bakış
- Koddaki (WPF .NET) kaynakları
- StaticResource biçimlendirme uzantısı
.NET Desktop feedback