Biçimlendirme Uzantıları ve WPF XAMLMarkup Extensions and WPF XAML

Bu konuda, XAML için biçimlendirme uzantıları kavramı, sözdizimi kuralları, amacı ve bunları kapsayan sınıf nesne modeli dahil olmak üzere anlatılmıştır.This topic introduces the concept of markup extensions for XAML, including their syntax rules, purpose, and the class object model that underlies them. Biçimlendirme uzantıları XAML dilinin genel bir özelliğidir ve XAML Hizmetleri .NET uygulamasıdır.Markup extensions are a general feature of the XAML language and of the .NET implementation of XAML services. Bu konu, WPF XAML 'de kullanılmak üzere biçimlendirme uzantılarını özellikle ayrıntılarıyla ayrıntılardır.This topic specifically details markup extensions for use in WPF XAML.

XAML Işlemcileri ve biçimlendirme uzantılarıXAML Processors and Markup Extensions

Genellikle bir XAML ayrıştırıcısı, bir öznitelik değerini bir temel değere dönüştürülebilen bir sabit dize olarak yorumlayabilir veya bazı yollarla bir nesneye dönüştürebilirsiniz.Generally speaking, a XAML parser can either interpret an attribute value as a literal string that can be converted to a primitive, or convert it to an object by some means. Bu tür bir anlamı bir tür dönüştürücüsünün başvurmasıdır; Bu, TypeConverters ve xamlkonularında belgelenmiştir.One such means is by referencing a type converter; this is documented in the topic TypeConverters and XAML. Ancak, farklı davranışın gerekli olduğu senaryolar vardır.However, there are scenarios where different behavior is required. Örneğin, bir XAML işlemcisi, bir öznitelik değerinin nesne grafiğinde yeni bir nesne ile sonuçlanmamalıdır.For example, a XAML processor can be instructed that a value of an attribute should not result in a new object in the object graph. Bunun yerine öznitelik, grafiğin başka bir bölümünde zaten oluşturulmuş bir nesneye veya statik bir nesneye başvuru yapan bir nesne grafiğine neden olmalıdır.Instead, the attribute should result in an object graph that makes a reference to an already constructed object in another part of the graph, or a static object. Başka bir senaryo, bir XAML işlemcisinin bir nesnenin oluşturucusuna varsayılan olmayan bağımsız değişkenler sağlayan bir sözdizimi kullanmasına izin verebilir.Another scenario is that a XAML processor can be instructed to use a syntax that provides non-default arguments to the constructor of an object. Bunlar, bir biçimlendirme uzantısının çözümü sağlayabildiği senaryoların türleridir.These are the types of scenarios where a markup extension can provide the solution.

Temel biçimlendirme uzantısı sözdizimiBasic Markup Extension Syntax

Bir öznitelik kullanımı, özellik öğesi kullanımındaki özellikler veya her ikisi de özellikler için değerler sağlamak üzere bir işaretleme uzantısı uygulanabilir.A markup extension can be implemented to provide values for properties in an attribute usage, properties in a property element usage, or both.

Bir öznitelik değeri sağlamak için kullanıldığında, bir biçimlendirme uzantısı sırasını XAML işlemcisine ayıran sözdizimi, açma ve kapatma küme ayraçları ({ve}) ile aynıdır.When used to provide an attribute value, the syntax that distinguishes a markup extension sequence to a XAML processor is the presence of the opening and closing curly braces ({ and }). Biçimlendirme uzantısının türü daha sonra, açılan küme ayracından hemen sonra dize belirteci tarafından tanımlanır.The type of markup extension is then identified by the string token immediately following the opening curly brace.

Özellik öğesi sözdiziminde kullanıldığında, bir biçimlendirme uzantısı, bir özellik öğesi değeri sağlamak için kullanılan diğer tüm öğeler için görsel olarak aynıdır: biçimlendirme uzantısı sınıfına bir öğe olarak başvuran bir XAML öğesi bildirimi (<>).When used in property element syntax, a markup extension is visually the same as any other element used to provide a property element value: a XAML element declaration that references the markup extension class as an element, enclosed within angle brackets (<>).

XAML-Defined biçimlendirme uzantılarıXAML-Defined Markup Extensions

XAML 'in WPF uygulamasına özgü olmayan çeşitli biçimlendirme uzantıları vardır, ancak bunun yerine bir dil olarak XAML 'in iç yapı veya özelliklerinin uygulamaları vardır.Several markup extensions exist that are not specific to the WPF implementation of XAML, but are instead implementations of intrinsics or features of XAML as a language. Bu biçimlendirme uzantıları, System. xaml derlemesinde genel .NET Framework XAML hizmetlerinin bir parçası olarak uygulanır ve XAML Language XAML ad alanı içindedir.These markup extensions are implemented in the System.Xaml assembly as part of the general .NET Framework XAML services, and are within the XAML language XAML namespace. Yaygın biçimlendirme kullanımı açısından, bu biçimlendirme uzantıları genellikle x: Kullanımdaki ön ek tarafından tanımlanabilir.In terms of common markup usage, these markup extensions are typically identifiable by the x: prefix in the usage. MarkupExtensionTemel sınıf (Ayrıca System. xaml içinde de tanımlanmıştır), WPF XAML dahil olmak üzere xaml okuyucular ve xaml yazıcılarında desteklenmesi için tüm işaretleme uzantılarının kullanması gereken düzeni sağlar.The MarkupExtension base class (also defined in System.Xaml) provides the pattern that all markup extensions should use in order to be supported in XAML readers and XAML writers, including in WPF XAML.

  • x:TypeTypeadlandırılmış tür için nesne sağlar.x:Type supplies the Type object for the named type. Bu özellik, en sık stiller ve şablonlarda kullanılır.This facility is used most frequently in styles and templates. Ayrıntılar için bkz. X:Type Işaretleme uzantısı.For details, see x:Type Markup Extension.

  • x:Static statik değerler üretir.x:Static produces static values. Değerler, doğrudan bir hedef özelliğin değerinin türü olmayan değer türü kod varlıklarından gelir, ancak bu tür için değerlendirilebilirler.The values come from value-type code entities that are not directly the type of a target property's value, but can be evaluated to that type. Ayrıntılar için bkz. X:static Işaretleme uzantısı.For details, see x:Static Markup Extension.

  • x:Null``nullbir özellik için değer olarak belirtir ve öznitelikler ya da Özellik öğesi değerleri için kullanılabilir.x:Null specifies null as a value for a property and can be used either for attributes or property element values. Ayrıntılar için bkz. X:null Işaretleme uzantısı.For details, see x:Null Markup Extension.

  • x:Array WPF temel öğeleri ve denetim modelleri tarafından sağlanan koleksiyon desteğinin kasıtlı olarak kullanılmasında, XAML sözdiziminde genel diziler oluşturma desteği sağlar.x:Array provides support for creation of general arrays in XAML syntax, for cases where the collection support provided by WPF base elements and control models is deliberately not used. Ayrıntılar için bkz. X:Array Işaretleme uzantısı.For details, see x:Array Markup Extension.

Not

x:Ön ek xaml dil iç öğelerinin tıpık xaml ad alanı eşlemesi için, BIR xaml dosyasının veya üretiminin kök öğesinde kullanılır.The x: prefix is used for the typical XAML namespace mapping of the XAML language intrinsics, in the root element of a XAML file or production. Örneğin, WPF uygulamaları için Visual Studio şablonları bu eşlemeyi kullanarak bir XAML dosyası başlatır x: .For example, the Visual Studio templates for WPF applications initiate a XAML file using this x: mapping. Kendi XAML ad alanı eşlemesinde farklı bir ön ek belirteci seçebilirsiniz, ancak bu belge varsayılan x: EŞLEMEYI xaml dili IÇIN xaml ad alanının tanımlı bir parçası olan varlıkları tanımlama yöntemi olarak kabul eder, bu da WPF varsayılan ad alanı veya belirli bir çerçeve ile ilişkili olmayan DIĞER xaml ad alanları farklıdır.You could choose a different prefix token in your own XAML namespace mapping, but this documentation will assume the default x: mapping as a means of identifying those entities that are a defined part of the XAML namespace for the XAML language, as opposed to the WPF default namespace or other XAML namespaces not related to a specific framework.

WPF-Specific biçimlendirme uzantılarıWPF-Specific Markup Extensions

WPF programlamasında kullanılan en yaygın biçimlendirme uzantıları, kaynak başvurularını ( StaticResource ve DynamicResource ) ve veri bağlamayı () destekleyen olanları destekledikleri olanlardır Binding .The most common markup extensions used in WPF programming are those that support resource references (StaticResource and DynamicResource), and those that support data binding (Binding).

  • StaticResource önceden tanımlanmış bir kaynağın değerini değiştirerek özellik için bir değer sağlar.StaticResource provides a value for a property by substituting the value of an already defined resource. Bir StaticResource değerlendirme, sonunda XAML yükleme zamanında yapılır ve çalışma zamanında nesne grafiğine erişemez.A StaticResource evaluation is ultimately made at XAML load time and does not have access to the object graph at run time. Ayrıntılar için bkz. StaticResource Işaretleme uzantısı.For details, see StaticResource Markup Extension.

  • DynamicResource Bu değeri bir kaynağa bir çalışma zamanı başvurusu olacak şekilde erteleyerek özellik için bir değer sağlar.DynamicResource provides a value for a property by deferring that value to be a run-time reference to a resource. Dinamik bir kaynak başvurusu, bu kaynağa her erişildiğinde yeni bir aramayı zorlar ve çalışma zamanında nesne grafiğine erişim sağlar.A dynamic resource reference forces a new lookup each time that such a resource is accessed and has access to the object graph at run time. Bu erişimi almak için, DynamicResource kavram WPF özellik sisteminde bağımlılık özellikleri tarafından desteklenir ve değerlendirilen ifadeler desteklenir.In order to get this access, DynamicResource concept is supported by dependency properties in the WPF property system, and evaluated expressions. Bu nedenle, yalnızca DynamicResource bir bağımlılık özelliği hedefi için kullanabilirsiniz.Therefore you can only use DynamicResource for a dependency property target. Ayrıntılar için bkz. DynamicResource Işaretleme uzantısı.For details, see DynamicResource Markup Extension.

  • Binding çalışma zamanında üst nesne için geçerli olan veri bağlamını kullanarak bir özellik için veri bağlama değeri sağlar.Binding provides a data bound value for a property, using the data context that applies to the parent object at run time. Bu biçimlendirme uzantısı görece karmaşıktır, çünkü bir veri bağlama belirtmek için önemli bir satır içi sözdizimi sunar.This markup extension is relatively complex, because it enables a substantial inline syntax for specifying a data binding. Ayrıntılar için bkz. Binding Işaretleme uzantısı.For details, see Binding Markup Extension.

  • RelativeSourceBindingçalışma zamanı nesne ağacında birkaç olası ilişkiye gidebileceğiniz bir için kaynak bilgileri sağlar.RelativeSource provides source information for a Binding that can navigate several possible relationships in the run-time object tree. Bu, birden çok kullanım şablonlarında oluşturulan veya çevreleyen nesne ağacının tam bilgisi olmadan kodda oluşturulan bağlamalar için özelleştirilmiş kaynağı sağlar.This provides specialized sourcing for bindings that are created in multi-use templates or created in code without full knowledge of the surrounding object tree. Ayrıntılar için bkz. RelativeSource MarkupExtension.For details, see RelativeSource MarkupExtension.

  • TemplateBinding bir denetim şablonunun, şablonu kullanacak sınıfın nesne modeli tanımlı özelliklerinden gelen değerleri kullanmasına olanak sağlar.TemplateBinding enables a control template to use values for templated properties that come from object-model-defined properties of the class that will use the template. Diğer bir deyişle, şablon tanımı içindeki özelliği, şablon uygulandıktan sonra yalnızca var olan bir içeriğe erişebilir.In other words, the property within the template definition can access a context that only exists once the template is applied. Ayrıntılar için bkz. TemplateBinding Işaretleme uzantısı.For details, see TemplateBinding Markup Extension. Pratik kullanımı hakkında daha fazla bilgi için TemplateBinding bkz. ControlTemplates Ile stillendirme örneği.For more information on the practical use of TemplateBinding, see Styling with ControlTemplates Sample.

  • ColorConvertedBitmap nispeten gelişmiş bir görüntüleme senaryosunu destekler.ColorConvertedBitmap supports a relatively advanced imaging scenario. Ayrıntılar için bkz. ColorConvertedBitmap Biçimlendirme Uzantısı.For details, see ColorConvertedBitmap Markup Extension.

  • ComponentResourceKey ve ThemeDictionary özellikle özel denetimlerle paketlenmiş kaynaklar ve Temalar için kaynak aramasının destek yönlerini destekler.ComponentResourceKey and ThemeDictionary support aspects of resource lookup, particularly for resources and themes that are packaged with custom controls. Daha fazla bilgi için bkz. ComponentResourceKey Işaretleme uzantısı, ThemeDictionary Biçimlendirme Uzantısıveya Denetim yazma genel bakış.For more information, see ComponentResourceKey Markup Extension, ThemeDictionary Markup Extension, or Control Authoring Overview.

*Uzantı sınıfları*Extension Classes

Hem genel XAML dili hem de WPF 'e özgü biçimlendirme uzantıları için, her biçimlendirme uzantısının davranışı, öğesinden türetilen bir sınıf aracılığıyla XAML işlemcisi olarak tanımlanır *Extension MarkupExtension ve yönteminin bir uygulamasını sağlar ProvideValue .For both the general XAML language and WPF-specific markup extensions, the behavior of each markup extension is identified to a XAML processor through a *Extension class that derives from MarkupExtension, and provides an implementation of the ProvideValue method. Her bir uzantıdaki bu yöntem, biçimlendirme uzantısı değerlendirildiğinde döndürülen nesneyi sağlar.This method on each extension provides the object that is returned when the markup extension is evaluated. Döndürülen nesne genellikle biçimlendirme uzantısına geçirilen çeşitli dize belirteçlerine göre değerlendirilir.The returned object is typically evaluated based on the various string tokens that are passed to the markup extension.

Örneğin, sınıfı, StaticResourceExtension gerçek kaynak aramasının yüzey uygulamasını sağlar ProvideValue , böylece uygulama, belirli bir uygulamanın, kaynağı aramak için kullanılan bir dize olması halinde istenen nesneyi döndürür x:Key .For example, the StaticResourceExtension class provides the surface implementation of actual resource lookup so that its ProvideValue implementation returns the object that is requested, with the input of that particular implementation being a string that is used to look up the resource by its x:Key. Mevcut bir işaretleme uzantısı kullanıyorsanız bu uygulama ayrıntısının büyük bölümü önemli değildir.Much of this implementation detail is unimportant if you are using an existing markup extension.

Bazı biçimlendirme uzantıları dize belirteci bağımsız değişkenlerini kullanmaz.Some markup extensions do not use string token arguments. Bunun nedeni, statik veya tutarlı bir değer döndürmeleri ya da değeri döndürülecek olan bağlamın parametresi aracılığıyla geçirilen hizmetlerden biri ile kullanılması olabilir serviceProvider .This is either because they return a static or consistent value, or because context for what value should be returned is available through one of the services passed through the serviceProvider parameter.

*ExtensionAdlandırma deseninin kolaylığı ve tutarlılığı vardır.The *Extension naming pattern is for convenience and consistency. Bir XAML işlemcisinin, bu sınıfı bir işaretleme uzantısı için destek olarak tanımlaması için gerekli değildir.It is not necessary in order for a XAML processor to identify that class as support for a markup extension. Kod tabanınız System. xaml içerdiğinden ve .NET Framework XAML Hizmetleri uygulamalarını kullandığından, bir XAML biçimlendirme uzantısı olarak tanınması gereken tek şey, MarkupExtension oluşturma söz dizimini desteklemek ve ' den türetilmektir.So long as your codebase includes System.Xaml and uses .NET Framework XAML Services implementations, all that is necessary to be recognized as a XAML markup extension is to derive from MarkupExtension and to support a construction syntax. WPF *Extension , örneğin adlandırma modelini takip eden biçimlendirme uzantısı-etkinleştirme sınıflarını tanımlar Binding .WPF defines markup extension-enabling classes that do not follow the *Extension naming pattern, for example Binding. Genellikle bunun nedeni, sınıfının saf biçimlendirme uzantısı desteğinin ötesinde senaryolar desteklemedir.Typically the reason for this is that the class supports scenarios beyond pure markup extension support. BindingBu durumda, bu sınıf xaml ile hiçbir şeyin olmadığı senaryolar için nesnenin yöntemlere ve özelliklerine çalışma zamanı erişimini destekler.In the case of Binding, that class supports run-time access to methods and properties of the object for scenarios that have nothing to do with XAML.

Başlatma metninin uzantı sınıfı yorumuExtension Class Interpretation of Initialization Text

Biçimlendirme uzantısı adı ve hala küme ayraçları içindeki dize belirteçleri, aşağıdaki yollarla bir XAML işlemcisi tarafından yorumlanır:The string tokens following the markup extension name and still within the braces are interpreted by a XAML processor in one of the following ways:

  • Virgül, her zaman ayrı belirteçlerin ayırıcısını veya ayırıcısını temsil eder.A comma always represents the separator or delimiter of individual tokens.

  • Ayrı ayrı ayrılmış belirteçler bir eşittir işareti içermiyorsa, her belirteç bir Oluşturucu bağımsız değişkeni olarak değerlendirilir.If the individual separated tokens do not contain any equals signs, each token is treated as a constructor argument. Her Oluşturucu parametresi, bu imza tarafından beklenen tür olarak verilmelidir ve bu imza için beklenen doğru sırada olmalıdır.Each constructor parameter must be given as the type expected by that signature, and in the proper order expected by that signature.

    Not

    XAML işlemcinin, Çift sayısı bağımsız değişken sayısıyla eşleşen oluşturucuyu çağırması gerekir.A XAML processor must call the constructor that matches the argument count of the number of pairs. Bu nedenle, özel bir işaretleme uzantısı uyguladığınızda aynı bağımsız değişken sayısına sahip birden çok Oluşturucu sağlamamanız gerekir.For this reason, if you are implementing a custom markup extension, do not provide multiple constructors with the same argument count. Aynı parametre sayısına sahip birden fazla işaretleme uzantısı Oluşturucu yolu tanımlanmazsa XAML işlemcisinin davranış şekli. bu durum, biçimlendirme uzantısı tür tanımlarında varsa, bir XAML işlemcisinin kullanım için bir özel durum oluşturulmasına izin verildiğini tahmin etmeniz gerekir.The behavior for how a XAML processor behaves if more than one markup extension constructor path with the same parameter count exists is not defined, but you should anticipate that a XAML processor is permitted to throw an exception on usage if this situation exists in the markup extension type definitions.

  • Ayrı ayrı ayrılmış belirteçler eşittir işareti içeriyorsa, bir XAML işlemcisi önce biçimlendirme uzantısı için parametresiz oluşturucuyu çağırır.If the individual separated tokens contain equals signs, then a XAML processor first calls the parameterless constructor for the markup extension. Ardından, her ad = değer çifti, biçimlendirme uzantısında var olan bir özellik adı olarak yorumlanır ve bu özelliğe atanacak bir değer.Then, each name=value pair is interpreted as a property name that exists on the markup extension, and a value to assign to that property.

  • Oluşturucu davranışı ile bir biçimlendirme uzantısında özellik ayarı davranışı arasında paralel bir sonuç varsa, hangi davranışı kullandığınıza bağımsız değildir.If there is a parallel result between the constructor behavior and the property setting behavior in a markup extension, it does not matter which behavior you use. = Yalnızca bir tane ayarlanabilir özelliği olan biçimlendirme uzantıları için özellik değeri çiftlerini kullanmak için daha yaygın kullanımdır. Bu, yalnızca işaretinizi daha bilinçli hale getirir ve daha yanlışlıkla Oluşturucu parametrelerini tersine çevir olasılığınız daha düşüktür.It is more common usage to use the property=value pairs for markup extensions that have more than one settable property, if only because it makes your markup more intentional and you are less likely to accidentally transpose constructor parameters. (Özellik = değer çiftlerini belirttiğinizde, bu özellikler herhangi bir sırada olabilir.) Ayrıca, biçimlendirme uzantısının ayarlanabilir özelliklerinden her birini ayarlayan bir oluşturucu parametresi sağladığı garanti yoktur.(When you specify property=value pairs, those properties may be in any order.) Also, there is no guarantee that a markup extension supplies a constructor parameter that sets every one of its settable properties. Örneğin, Binding özellik değeri biçimindeki uzantı aracılığıyla ayarlanabilir çok sayıda özelliği olan bir biçimlendirme uzantısıdır = , ancak Binding yalnızca iki oluşturucuyu destekler: parametresiz bir Oluşturucu ve bir başlangıç yolu ayarlayan bir.For example, Binding is a markup extension, with many properties that are settable through the extension in property=value form, but Binding only supports two constructors: a parameterless constructor, and one that sets an initial path.

  • Sabit noktalı virgül, bir biçimlendirme uzantısına ilerlemeksizin geçirilemez.A literal comma cannot be passed to a markup extension without escapement.

Kaçış dizileri ve biçimlendirme uzantılarıEscape Sequences and Markup Extensions

XAML işlemcisinde öznitelik işleme, küme ayraçları bir işaretleme uzantısı sırasının göstergeleri olarak kullanır.Attribute handling in a XAML processor uses the curly braces as indicators of a markup extension sequence. Ayrıca, boş bir küme ayracı çifti ve ardından değişmez küme ayracı ile bir kaçış sırası girerek, gerekirse değişmez bir küme ayracı karakter özniteliği değeri oluşturmak mümkündür.It is also possible to produce a literal curly brace character attribute value if necessary, by entering an escape sequence using an empty curly brace pair followed by the literal curly brace. Bkz. {} kaçış sırası-işaretleme uzantısı.See {} Escape Sequence - Markup Extension.

XAML kullanımında biçimlendirme uzantılarını iç içe geçirmeNesting Markup Extensions in XAML Usage

Birden çok biçimlendirme uzantısının iç içe geçirilmesi desteklenir ve her biçimlendirme uzantısı önce ayrıntılı olarak değerlendirilir.Nesting of multiple markup extensions is supported, and each markup extension will be evaluated deepest first. Örneğin, aşağıdaki kullanımı göz önünde bulundurun:For example, consider the following usage:

<Setter Property="Background"  
  Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />  

Bu kullanımda, x:Static önce ifade değerlendirilir ve bir dize döndürür.In this usage, the x:Static statement is evaluated first and returns a string. Bu dize daha sonra için bağımsız değişkeni olarak kullanılır DynamicResource .That string is then used as the argument for DynamicResource.

Biçimlendirme uzantıları ve özellik öğesi sözdizimiMarkup Extensions and Property Element Syntax

Bir özellik öğesi değerini dolduran bir nesne öğesi olarak kullanıldığında, biçimlendirme uzantısı sınıfı XAML 'de kullanılabilen tipik bir tür ile desteklenen nesne öğesinden görsel açıdan ayırt edilebilir.When used as an object element that fills a property element value, a markup extension class is visually indistinguishable from a typical type-backed object element that can be used in XAML. Tipik bir nesne öğesi ve bir biçimlendirme uzantısı arasındaki pratik fark, biçimlendirme uzantısının tür belirlenmiş bir değer olarak değerlendirilme veya bir ifade olarak ertelenmesi olabilir.The practical difference between a typical object element and a markup extension is that the markup extension is either evaluated to a typed value or deferred as an expression. Bu nedenle, biçimlendirme uzantısının özellik değerlerinin olası tür hatalarının mekanizmaları, geç bağlantılı bir özelliğin diğer programlama modellerinde nasıl ele alındığına benzer şekilde farklı olacaktır.Therefore the mechanisms for any possible type errors of property values for the markup extension will be different, similar to how a late-bound property is treated in other programming models. Normal nesne öğesi, XAML ayrıştırıldığında ayar yaptığı hedef özelliğe karşı tür eşleşmesi için değerlendirilir.An ordinary object element will be evaluated for type match against the target property it is setting when the XAML is parsed.

Bir özellik öğesini dolduracak nesne öğesi sözdiziminde kullanıldığında birçok biçimlendirme uzantısı, içinde içerik veya başka bir özellik öğesi söz dizimi içermez.Most markup extensions, when used in object element syntax to fill a property element, would not have content or any further property element syntax within. Bu nedenle, nesne öğesi etiketini kapatıp hiçbir alt öğe sağlamacaksınız.Thus you would close the object element tag, and provide no child elements. XAML işlemcisi tarafından herhangi bir nesne öğesiyle karşılaşıldığında, bu sınıf için Oluşturucu çağırılır ve ayrıştırılmış öğeden oluşturulan nesneyi başlatır.Whenever any object element is encountered by a XAML processor, the constructor for that class is called, which instantiates the object created from the parsed element. Biçimlendirme Uzantısı sınıfı farklı değil: biçimlendirme uzantınızın nesne öğesi söz diziminde kullanılabilir olmasını istiyorsanız parametresiz bir Oluşturucu sağlamanız gerekir.A markup extension class is no different: if you want your markup extension to be usable in object element syntax, you must provide a parameterless constructor. Bazı mevcut biçimlendirme uzantılarında, etkin başlatma için belirtilmesi gereken en az bir gerekli özellik değeri var.Some existing markup extensions have at least one required property value that must be specified for effective initialization. Öyleyse, bu özellik değeri genellikle nesne öğesinde bir özellik özniteliği olarak verilir.If so, that property value is typically given as a property attribute on the object element. Xaml ad alanında (x:) Dil özellikleri ve WPF XAML uzantıları başvuru sayfaları, gerekli özellikleri olan biçimlendirme uzantıları (ve gerekli özelliklerin adları) not edilir.In the XAML Namespace (x:) Language Features and WPF XAML Extensions reference pages, markup extensions that have required properties (and the names of required properties) will be noted. Başvuru sayfaları, belirli biçimlendirme uzantıları için nesne öğesi söz dizimi veya öznitelik söz dizimine izin verilmediğini de göz önünde bulunur.Reference pages will also note if either object element syntax or attribute syntax is disallowed for particular markup extensions. Bir önemli Case, özniteliksözdizimini destekleyemediği, bu dizinin içeriği etiketleme içinde içerik olarak belirtilmelidir.A notable case is x:Array Markup Extension, which cannot support attribute syntax because the contents of that array must be specified within the tagging as content. Dizi içerikleri genel nesneler olarak işlenir, bu nedenle öznitelik için varsayılan tür dönüştürücüsü uygulanabilir değildir.The array contents are handled as general objects, therefore no default type converter for the attribute is feasible. Ayrıca, X:Array Biçimlendirme Uzantısı bir type parametre gerektirir.Also, x:Array Markup Extension requires a type parameter.

Ayrıca bkz.See also