WPF'de XAML'ye genel bakış

Bu makalede, XAML dilinin özellikleri açıklanmıştır ve XAML'i kullanarak uygulama (WPF) Windows Presentation Foundation nasıl kullanabileceğiniz açıklanmıştır. Bu makalede WPF tarafından uygulanan XAML özellikle açıklanmıştır. XAML'nin kendisi WPF'den daha büyük bir dil kavramıdır.

XAML nedir?

XAML, bildirime göre biçimlendirme dilidir. .NET Core programlama modeline uygulandığı gibi, XAML bir .NET Core uygulaması için kullanıcı arabirimi oluşturmayı kolaylaştırır. Bildirime bağlı XAML işaretlemesinde görünür kullanıcı arabirimi öğeleri oluşturabilir ve ardından kısmi sınıf tanımları aracılığıyla işaretlemeye katılmış arka kod dosyalarını kullanarak kullanıcı arabirimi tanımını çalışma zamanı mantığından ayırabilirsiniz. XAML doğrudan derlemelerde tanımlanan belirli bir backing türleri kümesinde nesnelerin örneğini temsil eder. Bu, genellikle bir destek türü sistemine bu kadar doğrudan bir bağlama olmadan yorumlanır bir dil olan diğer işaretleme dillerinden farklı değildir. XAML, farklı olabilecek araçları kullanarak ayrı tarafların kullanıcı arabiriminde ve uygulamanın mantığında çalışabilecekleri bir iş akışı sağlar.

Metin olarak temsil edilen XAML dosyaları genellikle uzantıya sahip XML .xaml dosyalarıdır. Dosyalar herhangi bir XML kodlaması tarafından kodlanmış olabilir, ancak UTF-8 olarak kodlama tipiktir.

Aşağıdaki örnekte, bir kullanıcı arabiriminin parçası olarak nasıl düğme oluşturabilirsiniz? Bu örnek, XAML'nin genel kullanıcı arabirimi programlama benzetimlerini nasıl temsil ettiğini (tam bir örnek değildir) size bir çeşitle vermek için tasarlanmıştır.

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

Kısaca XAML söz dizimi

Aşağıdaki bölümlerde XAML söz dizimlerinin temel biçimleri açıklanmaktadır ve kısa bir işaretleme örneği ve verir. Bu bölümler, bunların destek türü sisteminde nasıl temsil edildikleri gibi her söz dizimi formu hakkında eksiksiz bilgiler sağlamak için amaçlanmaz. XAML söz dizimlerinin özellikleri hakkında daha fazla bilgi için bkz. Ayrıntılı XAML Söz Dizimi.

XML dilini daha önce biliyorsanız, sonraki birkaç bölümdeki malzemenin büyük bölümü size basit gelecektir. Bu, XAML'nin temel tasarım ilkelerinden birinin sonucudur. XAML dili kendi kavramlarını tanımlar, ancak bu kavramlar XML dili ve işaretleme formu içinde çalışır.

XAML nesne öğeleri

Nesne öğesi genellikle bir türün örneğini bildirer. Bu tür, dil olarak XAML kullanan teknoloji tarafından başvurulan derlemelerde tanımlanır.

Nesne öğesi söz dizimi her zaman bir açma açılı ayracı () ile < başlar. Bunu, örnek oluşturmak istediğiniz türün adı takip ediyor. (Ad bir ön ek, daha sonra açık bir kavram içerebilir.) Bundan sonra, isteğe bağlı olarak nesne öğesinde öznitelikler bildirebilirsiniz. Nesne öğesi etiketini tamamlamak için, kapanış açılı ayracı ( ) ile sona > erin. Bunun yerine, etiketi eğik çizgi ve kesme açılı ayraç ile tamamlayarak, içeriği olmayan kendi kendine kapatma formunu kullanabilirsiniz ( /> ). Örneğin, daha önce gösterilen işaretleme kod parçacığına yeniden bakın.

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

Bu, iki nesne öğelerini belirtir: (içerik ve kapanış etiketi daha <StackPanel> sonra) ve (birkaç öznitelikli kendi kendine kapatma <Button .../> formu). Nesne öğeleri ve her biri, WPF tarafından tanımlanan ve WPF derlemelerinin bir parçası StackPanel olan bir sınıfın adıyla Button eşler. Bir nesne öğesi etiketi belirttiğinizde, temel alınan türün yeni bir örneğini oluşturmak için XAML işlemesi için bir yönerge oluştururuz. Her örnek, XAML ayrıştırılan ve yüklenirken temel alınan türün parametresiz oluşturucusu çağrılarak oluşturulur.

Öznitelik söz dizimi (özellikler)

Bir nesnenin özellikleri genellikle nesne öğesinin öznitelikleri olarak ifade olabilir. Öznitelik söz dizimi, ayarda olan nesne özelliğini, ardından atama işlecini (=) olarak adlar. Bir özniteliğin değeri her zaman tırnak işaretleri içinde yer alan bir dize olarak belirtilir.

Öznitelik söz dizimi, en kolaylaştırılmış özellik ayarı söz dizimidir ve geçmişte işaretleme dilleri kullanan geliştiriciler için kullanılacak en sezgisel söz dizimidir. Örneğin, aşağıdaki işaretleme olarak belirtilen metni görüntülemenin yanı sıra kırmızı metin ve mavi bir arka plana sahip bir düğme Content oluşturur.

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

Özellik öğesi söz dizimi

Özellik değerini sağlamak için gereken nesne veya bilgiler tırnak işareti ve öznitelik söz diziminin dize kısıtlamaları içinde yeterince ifade edilelamayay olduğundan, bir nesne öğesinin bazı özellikleri için öznitelik söz dizimi mümkün değildir. Bu durumlarda özellik öğesi söz dizimi olarak bilinen farklı bir söz dizimi kullanılabilir.

özellik öğesi başlangıç etiketinin söz dizimi <TypeName.PropertyName> şudur: . Genellikle, bu etiketin içeriği, özelliğin değeri olarak alan türünde bir nesne öğesidir. İçeriği belirtdikten sonra, özellik öğesini bir bitiş etiketiyle kapatmanız gerekir. Bitiş etiketinin söz dizimi şu </TypeName.PropertyName> şekildedir: .

Öznitelik söz dizimi mümkünse, öznitelik söz dizimlerinin kullanımı genellikle daha kullanışlıdır ve daha küçük bir işaretlemeye olanak sağlar, ancak bu genellikle teknik bir sınırlama değildir. Aşağıdaki örnek, önceki öznitelik söz dizimi örneğinde olduğu gibi aynı özelliklerin ayar olduğunu gösterir, ancak bu kez tüm özellikleri için özellik öğesi söz dizimi kullanılarak Button .

<Button>
  <Button.Background>
    <SolidColorBrush Color="Blue"/>
  </Button.Background>
  <Button.Foreground>
    <SolidColorBrush Color="Red"/>
  </Button.Foreground>
  <Button.Content>
    This is a button
  </Button.Content>
</Button>

Koleksiyon söz dizimi

XAML dili, daha insanlar tarafından okunabilir işaretlemeler üreten bazı iyileştirmeler içerir. Bu iyileştirmelerden biri, belirli bir özellik bir koleksiyon türü alıyorsa, işaretlemede bu özelliğin değerindeki alt öğeler olarak bildirgeniz öğelerin koleksiyonun bir parçası olmasıdır. Bu durumda alt nesne öğelerinin koleksiyonu, koleksiyon özelliğine ayarlanmış değerdir.

Aşağıdaki örnek, özelliğin değerlerini ayarlamaya ait koleksiyon söz dizimi GradientStops gösterir.

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <!-- no explicit new GradientStopCollection, parser knows how to find or create -->
    <GradientStop Offset="0.0" Color="Red" />
    <GradientStop Offset="1.0" Color="Blue" />
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

XAML içerik özellikleri

XAML, bir sınıfın özelliklerden birini tam olarak XAML içerik özelliği olarak ayalıttırabilinir bir dil özelliğini belirtir. Bu nesne öğesinin alt öğeleri, bu içerik özelliğinin değerini ayarlamak için kullanılır. Başka bir deyişle, içerik özelliği için benzersiz olarak, bu özelliği XAML işaretlemesinde ayarlarken bir özellik öğesini atlar ve işaretlemede daha görünür bir üst/alt ifade üretebilirsiniz.

Örneğin, Border bir içerik özelliğini Child belirtir. Aşağıdaki iki Border öğe aynı şekilde kabul edilir. İlki içerik özelliği söz diziminin avantajından faydalanarak özellik öğesini Border.Child atlar. İkincisi açıkça Border.Child gösterir.

<Border>
  <TextBox Width="300"/>
</Border>
<!--explicit equivalent-->
<Border>
  <Border.Child>
    <TextBox Width="300"/>
  </Border.Child>
</Border>

XAML dilinin kuralı olarak, bir XAML içerik özelliğinin değerine, bu nesne öğesinde yer alan diğer özellik öğelerinin öncesinde veya sonrasında tamamen verilsin. Örneğin, aşağıdaki işaretleme derlanmaz.

<Button>I am a
  <Button.Background>Blue</Button.Background>
  blue button</Button>

XAML söz dizimlerinin özellikleri hakkında daha fazla bilgi için bkz. Ayrıntılı XAML Söz Dizimi.

Metin içeriği

Az sayıda XAML öğe, içeriği olarak metinleri doğrudan işleyebilirsiniz. Bunu etkinleştirmek için aşağıdaki durumlardan birinin doğru olması gerekir:

  • sınıf bir içerik özelliği bildirebilir ve bu içerik özelliği bir dizeye atanabilir bir tür olmalıdır (tür Object olabilir). Örneğin, herhangi bir içerik özelliği olarak kullanır ve türündedir ve bu, üzerinde aşağıdaki ContentControl Content kullanımı Object ContentControl destekler: Button <Button>Hello</Button> .

  • Türün bir tür dönüştürücüsü bildir olması gerekir; bu durumda metin içeriği, bu tür dönüştürücüsü için başlatma metni olarak kullanılır. Örneğin, <Brush>Blue</Brush> içerik değerini Blue fırçaya dönüştürür. Bu durum uygulamada daha az yaygındır.

  • Türün bilinen bir XAML dili temel dili olması gerekir.

İçerik özellikleri ve koleksiyon söz dizimi birleştirilmiş

Bu örneği göz önünde bulundurarak.

<StackPanel>
  <Button>First Button</Button>
  <Button>Second Button</Button>
</StackPanel>

Burada, her Button biri öğesinin bir alt öğesidir. StackPanel Bu, iki farklı nedenle iki etiketi atlar, kolaylaştırılmış ve sezgisel bir işaretlemedir.

  • Atlanmış StackPanel.Children özellik öğesi: StackPanel , 'den Panel türeter. Panel , Panel.Children XAML içerik özelliği olarak tanımlar.

  • Atlanmış UIElementCollection nesne öğesi: Panel.Children özelliği, uygulayan UIElementCollection türünü IList alır. Koleksiyonun öğe etiketi, gibi koleksiyonları işlemeye için XAML kurallarına bağlı olarak IList atlanabilir. (Bu durumda, parametresiz bir oluşturucu göstermeyer ve nesne öğesinin açıklamalı olarak gösterilme nedeni bu olduğundan aslında örneği UIElementCollection UIElementCollection başlatılamaz).

<StackPanel>
  <StackPanel.Children>
    <!--<UIElementCollection>-->
    <Button>First Button</Button>
    <Button>Second Button</Button>
    <!--</UIElementCollection>-->
  </StackPanel.Children>
</StackPanel>

Öznitelik söz dizimi (olaylar)

Öznitelik söz dizimi, özellikler yerine olaylar olan üyeler için de kullanılabilir. Bu durumda özniteliğin adı olayın adıdır. XAML için olayların WPF uygulamasında, özniteliğin değeri o olayın temsilcisini uygulayan bir işleyicinin adıdır. Örneğin, aşağıdaki işaretleme, işaretlemede oluşturulan bir Click olay için bir Button işleyici atar:

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

WPF'de olaylar ve XAML için yalnızca bu öznitelik söz dizimi örneğinden daha fazlası vardır. Örneğin, burada başvurulan ifadelerin ClickHandler neleri temsil ettiğini ve nasıl tanımlandığı merak ediyor olabilir. Bu, bu makalenin yaklaşan Olaylar ve XAML kodunun ardındaki bölümünde açıklanmıştır.

XAML'de büyük/büyük/büyük harf ve boşluk

Genel olarak, XAML büyük/büyük/büyük harfe duyarlıdır. WpF XAML, destek türlerini çözümleme amacıyla CLR'nin büyük/büyük/büyük harfe duyarlı olduğu kurallarla büyük/büyük harfe duyarlıdır. Nesne öğeleri, özellik öğeleri ve öznitelik adlarının hepsi, derlemedeki temel alınan türe veya bir türün üyesine göre adla karşılaştırıldıklarında hassas büyük/küçük harf kullanılarak belirtilmelidir. XAML dili anahtar sözcükleri ve temel öğeler de büyük/büyük/büyük harfe duyarlıdır. Değerler her zaman büyük/büyük/büyük harfe duyarlı değildir. Değerler için büyük/küçük harf duyarlılığı, değeri alan özellikle ilişkili tür dönüştürücü davranışına veya özellik değeri türüne bağlıdır. Örneğin, türü alan özellikler eşdeğer değerler olarak veya olabilir, ancak dizenin yerel Boolean true True WPF XAML ayrıştırıcı türü dönüştürmesi bunlara eşdeğer olarak zaten izin Boolean verir.

WPF XAML işlemcileri ve seri hale getiricileri, önemli olmayan tüm boşluğu yoksayacak veya bırakacak ve önemli boşluklar normalleştirecek. Bu, XAML belirtimlerinin varsayılan boşluk davranışı önerileriyle tutarlıdır. Bu davranış yalnızca XAML içerik özellikleri içinde dizeler belirttiğinizde sonuç verir. En basit terimle, XAML boşluk, satır besleme ve sekme karakterlerini boşluklara dönüştürür ve ardından bitişik dizenin herhangi bir ucunda bulunursa bir boşluğu korur. XAML boşluk işlemenin tam açıklaması bu makalede ele değildir. Daha fazla bilgi için bkz. XAML'de boşluk işleme.

İşaretleme uzantıları

İşaretleme uzantıları bir XAML dil kavramıdır. Öznitelik söz dizimlerinin değerini sağlamak için kullanılırken küme ayraçları ( { ve ) bir işaretleme uzantısı kullanımını } gösterir. Bu kullanım, XAML işlemesini öznitelik değerlerinin genel olarak değişmez dize veya dize dönüştürülebilir değer olarak işlerinden kaçışa yönlendirmektedir.

WPF uygulama programlamada kullanılan en yaygın işaretleme uzantıları, veri bağlama ifadeleri ve kaynak Binding başvuruları ve için StaticResource DynamicResource kullanılır. Biçimlendirme uzantılarını kullanarak, özellik genel olarak bir öznitelik sözdizimini desteklemese bile özelliklere değer sağlamak için öznitelik söz dizimi kullanabilirsiniz. İşaretleme uzantıları genellikle değerleri erteleme veya yalnızca çalışma zamanında mevcut olan diğer nesnelere başvurmak gibi özellikleri etkinleştirmek için ara ifade türlerini kullanır.

Örneğin, aşağıdaki işaretleme özelliğin değerini öznitelik söz Style dizimi kullanarak ayarlar. Styleözelliği, varsayılan olarak bir Style öznitelik söz dizimi dizesi tarafından örneği verilenen sınıfının bir örneğini alır. Ancak bu durumda özniteliği, belirli bir işaretleme uzantısına StaticResource başvurur. Bu işaretleme uzantısı işlendiğinde, daha önce kaynak sözlüğünde anahtarlı kaynak olarak örneklenmiş bir stile başvuru döndürür.

<Page.Resources>
  <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="Background" Value="Blue"/>
  </Style>
</Page.Resources>
<StackPanel>
  <Border Style="{StaticResource PageBackground}">
  </Border>
</StackPanel>

Özel olarak WPF'de uygulanan XAML için tüm işaretleme uzantılarının başvuru listesi için bkz. WPF XAML Uzantıları. System.Xaml tarafından tanımlanan ve .NET Core XAML uygulamaları için daha yaygın olarak kullanılabilen işaretleme uzantılarının başvuru listesi için bkz. XAML Ad Alanı (x:) Dil Özellikleri. İşaretleme uzantısı kavramları hakkında daha fazla bilgi için bkz. İşaretleme Uzantıları ve WPF XAML.

Tür dönüştürücüler

Kısa Bölümdeki XAML Söz Dizimi bölümünde öznitelik değerinin bir dize tarafından ayarlanabilecek olması gerekirdi. Dizelerin diğer nesne türlerine veya ilkel değerlere dönüştürülmesiyle ilgili temel, yerel işleme, veya gibi belirli türler için yerel işlemeye ek olarak türün String kendisine DateTime göre Uri dönüştürülür. Ancak birçok WPF türü veya bu türlerin üyeleri, temel dize özniteliği işleme davranışını daha karmaşık nesne türlerinin örneklerini dize ve öznitelik olarak belirtilmeli şekilde genişletmektedir.

Yapı, Thickness XAML kullanımları için etkinleştirilmiş tür dönüştürmesi olan bir tür örneğidir. Thickness , iç içe dikdörtgen içindeki ölçümleri gösterir ve gibi özellikler için değer olarak Margin kullanılır. üzerine bir tür dönüştürücü yerleştirerek, kullanan tüm özellikleri öznitelik olarak Thickness Thickness belirtilmeli olduğundan XAML'de belirtmek daha kolaydır. Aşağıdaki örnek, bir için değer sağlamak için tür dönüştürme ve öznitelik söz dizimi Margin kullanır:

<Button Margin="10,20,10,30" Content="Click me"/>

Önceki öznitelik söz dizimi örneği, aşağıdaki daha ayrıntılı söz dizimi örneğine eşdeğerdir; burada bunun yerine nesnesi öğesi içeren Margin özellik öğesi sözdizimi aracılığıyla Thickness ayarlanır. 'nin dört temel Thickness özelliği, yeni örnekte öznitelik olarak ayarlanır:

<Button Content="Click me">
  <Button.Margin>
    <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
  </Button.Margin>
</Button>

Not

Ayrıca türün kendisi parametresiz bir oluşturucuya sahip değildir, çünkü türün kendisi bir alt sınıf dahil etmeden bu türe bir özellik ayarlamanın tek genel yolu tür dönüştürmenin sınırlı sayıda nesne vardır. Cursor bunun bir örneğidir.

Tür dönüştürme hakkında daha fazla bilgi için bkz. TypeConverters ve XAML.

XAML kök öğeleri ve XAML ad alanları

Bir XAML dosyasının hem iyi formed xml dosyası hem de geçerli bir XAML dosyası olması için yalnızca bir kök öğeye sahip olması gerekir. Tipik WPF senaryoları için, WPF uygulama modelinde belirgin bir anlamı olan bir kök öğe kullanırsınız (örneğin, bir sayfa için, dış sözlük için veya uygulama tanımı Window Page ResourceDictionary Application için). Aşağıdaki örnek, bir WPF sayfası için tipik bir XAML dosyasının kök öğesini ve kök öğesini Page gösterir.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Page>

Kök öğesi ve özniteliklerini de xmlns xmlns:x içerir. Bu öznitelikler bir XAML işlemcisi için, hangi XAML ad alanlarının işaretlemenin öğe olarak başvuracakları türler için tür tanımlarını içerdiğini gösterir. özniteliği, xmlns varsayılan XAML ad alanını özellikle gösterir. Varsayılan XAML ad alanı içinde işaretleme içindeki nesne öğeleri ön ek olmadan belirtilebilir. Çoğu WPF uygulama senaryosunda ve SDK'nın WPF bölümlerinde verilen örneklerin neredeyse hepsi için varsayılan XAML ad alanı WPF ad alanıyla eşlenmiş http://schemas.microsoft.com/winfx/2006/xaml/presentation olur. özniteliği, xmlns:x XAML dil ad alanını eşler ek bir XAML ad alanını http://schemas.microsoft.com/winfx/2006/xaml gösterir.

bir namescope kullanımı ve eşlemesi için bir kapsam tanımlamak için bu kullanımı xmlns XML 1.0 belirtimi ile tutarlıdır. XAML ad kapsamları YALNıZCA XML ad kapsamlarından farklıdır. XAML ad kapsamları, tür çözümlemesi ve XAML ayrıştırma söz konusu olduğunda namescope'un öğelerinin türlere göre nasıl destekleneleri konusunda da bir şey ifade eder.

Öznitelikler xmlns yalnızca her XAML dosyasının kök öğesinde kesinlikle gereklidir. xmlns tanımlar kök öğesinin tüm alt öğelerine uygulanır (bu davranış yine .için XML 1.0 belirtimi ile tutarlıdır) özniteliklerine kök altındaki diğer öğelerde de izin verilir ve tanımlayan öğenin tüm alt öğelerine xmlns xmlns uygulanır. Ancak, XAML ad alanlarının sık tanımları veya yeniden tanımları, okunma zor bir XAML işaretleme stiline neden olabilir.

XAML işlemcisinin WPF uygulaması, WPF çekirdek derlemeleri hakkında farkındalığı olan bir altyapı içerir. WPF çekirdek derlemelerinin varsayılan XAML ad alanına WPF eşlemelerini destekleyen türleri içerdiği bilinir. Bu, proje derleme dosyanız ile WPF derleme ve proje sistemlerinin parçası olan yapılandırma aracılığıyla etkinleştirilir. Bu nedenle, varsayılan XAML ad alanını varsayılan olarak bildirerek WPF derlemelerinden gelen XAML öğelerine xmlns başvurabilirsiniz.

x: ön eki

Önceki kök öğe örneğinde ön ek, XAML dil yapılarını destekleyen ayrılmış XAML ad alanı olan XAML ad alanını x: http://schemas.microsoft.com/winfx/2006/xaml eşlemek için kullanılmıştır. Bu x: ön ek, örneklerde ve bu SDK'daki belgelerde proje şablonlarında bu XAML ad alanını eşlemek için kullanılır. XAML dilinin XAML ad alanı, XAML'sinde sık sık kullanabileceğiniz çeşitli programlama yapıları içerir. Aşağıda, kullanmak üzere en yaygın ön ek x: programlama yapılarının bir listesi yer almaktadır:

  • x:Key:Bir (veya diğer çerçevelerde benzer sözlük kavramları) içinde yer alan her ResourceDictionary kaynak için benzersiz bir anahtar ayarlar. x:Key büyük olasılıkla tipik bir WPF uygulamasının işaretlemesinde göreceğiniz kullanımların yüzde x: 90'lık bir oranıdır.

  • x:Class:Bir XAML sayfası için arka kod sağlayan sınıfın CLR ad alanını ve sınıf adını belirtir. WPF programlama modeli başına arkalı kodu desteklemek için böyle bir sınıfınız olması gerekir ve bu nedenle kaynak olsa bile neredeyse her zaman x: eşlenmiş olarak görüyorsunuz.

  • x:Name:Bir nesne öğesi işlendikten sonra çalışma zamanı kodunda var olan örnek için bir çalışma zamanı nesne adı belirtir. Genel olarak, x:Name için sık sık WPF tanımlı eşdeğer bir özellik kullanırsiniz. Bu tür özellikler özel olarak bir CLR destek özelliğiyle eşler ve bu nedenle, başlatılmış XAML'den adlandırılmış öğeleri bulmak için sık sık çalışma zamanı kodu kullanırsanız uygulama programlama için daha kullanışlıdır. Bu tür en yaygın FrameworkElement.Name özelliktir. Eşdeğer WPF çerçeve düzeyi özelliği belirli bir türde desteklenmiyorsa yine de x:Name Name kullanabilirsiniz. Bu, belirli animasyon senaryolarında gerçekleşir.

  • x:Static:Aksi takdirde XAML ile uyumlu bir özellik olmayan statik bir değer döndüren bir başvuru sağlar.

  • x:Type:Bir tür Type adına göre bir başvuru oluşturun. Bu, özelliğin Type Style.TargetType Type x:Type işaretleme uzantısı kullanımı isteğe bağlı olacak şekilde yerel dize dönüştürmesine sahip olmasına rağmen, gibi öznitelikler belirtmek için kullanılır.

Ön ek/XAML ad alanına ek programlama yapıları x: vardır ve bunlar o kadar yaygın değildir. Ayrıntılar için bkz. XAML Ad Alanı (x:) Dil Özellikleri.

XAML'de özel ön ekler ve özel türler

Kendi özel derlemeleriniz için veya PresentationCore, PresentationFramework ve WindowsBase'in WPF çekirdeği dışındaki derlemeler için, derlemeyi özel eşlemenin bir parçası olarak xmlns belirtabilirsiniz. Daha sonra, bu tür, çalıştığınız XAML kullanımlarını desteklemek için doğru şekilde uygulanmış olduğu sürece, XAML'niz içinde bu derlemeden türlere başvurabilirsiniz.

Aşağıda, XAML işaretlemesinde özel ön eklerin nasıl çalışmalarına temel bir örnek ve bir örnek ve açıklama ve ardından yer ve açıklama ve açıklama ekleri ve bilgiler Ön ek kök öğe etiketinde tanımlanır ve paketlenen ve uygulamayla kullanılabilen custom belirli bir derlemeyle eşlenmiş. Bu derleme, genel XAML kullanımını desteklemek ve wpF XAML içerik modeline bu belirli noktada eklemeye izin verilen bir sınıf devralması kullanmak için uygulanan bir NumericUpDown türü içerir. Bu denetimin bir örneği, ön ek kullanılarak bir XAML ayrıştırıcısı hangi XAML ad alanının türü içerdiğini ve dolayısıyla tür tanımını içeren backing derlemenin nerede olduğunu bilecek şekilde nesne öğesi olarak NumericUpDown bildirildi.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
    >
  <StackPanel Name="LayoutRoot">
    <custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...
  </StackPanel>
</Page>

XAML'de özel türler hakkında daha fazla bilgi için bkz. WPF için XAML ve Özel Sınıflar.

Derlemelerde XML ad alanları ve kod ad alanlarının nasıl ilişkili olduğu hakkında daha fazla bilgi için bkz. WPF XAML için XAMLAd Alanları ve Ad Alanı Eşlemesi.

Olaylar ve XAML arkalı kod

WPF uygulamalarının çoğu hem XAML işaretlemeden hem de arkalarından koddan oluşur. Proje içinde XAML bir dosya olarak yazılır ve arka arkasındaki kod dosyasını yazmak için Microsoft Visual Basic veya C# gibi bir .xaml CLR dili kullanılır. WpF programlama ve uygulama modellerinin bir parçası olarak bir XAML dosyası işaretlemesi derlenmiş olduğunda, XAML dosyası için XAML kod arka arkasındaki dosyasının konumu, XAML kök öğesinin özniteliği olarak bir ad alanı ve sınıf belirterek x:Class tanımlanır.

Şu ana kadarki örneklerde birkaç düğme gördünüz, ancak bu düğmelerin hiçbiri henüz onlarla ilişkili mantıksal bir davranışa sahip değil. Bir nesne öğesi için davranış eklemeye yönelik birincil uygulama düzeyinde mekanizma, öğe sınıfının mevcut bir olayı kullanmak ve bu olay çalışma zamanında çağrıldığında çağrılan o olay için belirli bir işleyici yazmaktır. Olay adı ve kullanılan işleyicinin adı işaretlemede belirtilirken, işleyicinizi uygulayan kod arka kodda tanımlanır.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>
namespace ExampleNamespace
{
  public partial class ExamplePage
  {
    void Button_Click(object sender, RoutedEventArgs e)
    {
      Button b = e.Source as Button;
      b.Foreground = Brushes.Red;
    }
  }
}
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim b As Button = e.Source
    b.Foreground = Brushes.Red
End Sub

Arka arkasındaki kod dosyasının CLR ad alanını kullandığına ve bu ad alanı içinde ExampleNamespace kısmi bir sınıf olarak ExamplePage bildirilene dikkat olun. Bu, x:Class özniteliğinin değerini paralel olarak ExampleNamespace verir.ExamplePage biçimlendirme kökünde sağlanmıştır. WPF işaretleme derleyicisi, kök öğe türünden bir sınıf türeterek derlenmiş herhangi bir XAML dosyası için kısmi bir sınıf oluşturacak. Aynı kısmi sınıfı da tanımlayan arkadan kod sağlarsanız, sonuçta elde edilen kod derlenmiş uygulamanın aynı ad alanı ve sınıfı içinde bir araya gelir.

WPF'de arka arkasındaki kod programlama gereksinimleri hakkında daha fazla bilgi için bkz. WPF'de Arka Ödeme, Olay İşleyicisi ve Kısmi Sınıf Gereksinimleri.

Arkadan koddan ayrı bir dosya oluşturmak istemiyorsanız, kodunuzu bir XAML dosyasında satır içi olarak da oluşturabilirsiniz. Ancak satır içi kod, önemli sınırlamalara sahip olan daha az çok yönlü bir tekniktir. Daha fazla bilgi için bkz. WPF'de Code-Behind ve XAML.

Yönlendiren olaylar

WPF için temel olan belirli bir olay özelliği, yönlendirilen bir olaydır. Yönlendirilen olaylar, öğeler bir ağaç ilişkisi aracılığıyla bağlı olduğu sürece, bir öğenin farklı bir öğe tarafından yükseltilen bir olayı işlemeye olanak sağlar. XAML özniteliğiyle olay işlemeyi belirtirken, yönlendirilen olay sınıf üyeleri tablosunda bu olayı listeleyen öğeler de dahil olmak üzere herhangi bir öğe için uygun olabilir ve iş olabilir. Bu, olay adı özniteliğini sahip olan sınıf adıyla nitelendirerek başarılı olur. Örneğin, devam eden örnekteki üst öğe, nesne öğesinde özniteliğini öznitelik değeri olarak işleyici adınızla belirterek alt öğe düğmesinin olayı için bir işleyici StackPanel StackPanel / Button Click Button.Click StackPanel kaydederek. Daha fazla bilgi için bkz. Yönlendirilen Olaylara Genel Bakış.

XAML adlandırılmış öğeleri

Varsayılan olarak, bir XAML nesne öğesi işlenerek bir nesne grafı içinde oluşturulan nesne örneği benzersiz bir tanımlayıcıya veya nesne başvurusuna sahip değildir. Buna karşılık, kodda bir oluşturucu çağırırsanız, kodda daha sonra örneğine başvurabilirsiniz, böylece neredeyse her zaman oluşturucu sonucu kullanarak bir değişkeni oluşturulmuş örneğine ayarlayabilirsiniz. XAML, işaretleme tanımı aracılığıyla oluşturulan nesnelere standart erişim sağlamak için x:Name özniteliğini tanımlar. Özniteliğin değerini herhangi bir x:Name nesne öğesinde ayarlayın. Arkadaki kodunda seçtiğiniz tanımlayıcı, oluşturulmuş örneği ifade etmek için bir örnek değişkenine eşdeğerdir. Her açıdan, adlandırılmış öğeler nesne örnekleri (bu örnekteki ad başvuruları) gibi işlev gösterir ve arkadeki kodunuz uygulama içindeki çalışma zamanı etkileşimlerini işlemek için adlandırılmış öğelere başvurur. Örnekler ve değişkenler arasındaki bu bağlantı WPF XAML işaretleme derleyicisi tarafından tamamlanmıştır ve daha belirgin olarak bu makalede ayrıntılı olarak ele alınmayacak gibi özellikleri ve InitializeComponent desenleri içerir.

WPF çerçeve düzeyi XAML öğeleri, XAML tanımlı özniteliğine eşdeğer Name olan bir özelliği x:Name devralın. Bazı diğer sınıflar için özellik düzeyinde eşdeğerler de x:Name sağlar ve bu da genel olarak bir özellik olarak Name tanımlanır. Genel olarak, üyeler tablosunda seçtiğiniz Name öğe/tür için bir özellik bulamazsanız bunun yerine x:Name kullanın. Değerler, belirli alt sistemler veya gibi yardımcı yöntemler tarafından çalışma zamanında kullanılan x:Name bir XAML öğesinin tanımlayıcısını FindName sağlar.

Aşağıdaki örnek bir Name öğede StackPanel kümeler. Ardından içindeki içindeki bir Button işleyicisi, StackPanel tarafından ayar olarak örnek başvurusu aracılığıyla StackPanel buttonContainer başvurusuna Name başvurur.

<StackPanel Name="buttonContainer">
  <Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
void RemoveThis(object sender, RoutedEventArgs e)
{
    FrameworkElement fe = e.Source as FrameworkElement;
    if (buttonContainer.Children.Contains(fe))
    {
        buttonContainer.Children.Remove(fe);
    }
}
 Private Sub RemoveThis(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
     Dim fe As FrameworkElement = e.Source
     If (buttonContainer.Children.Contains(fe)) Then
         buttonContainer.Children.Remove(fe)
     End If
End Sub

Bir değişkende olduğu gibi örneğin XAML adı da kapsam kavramına göre yönetilir, böylece adlar belirli bir kapsam içinde tahmin edilebilir bir kapsam içinde benzersiz olacak şekilde zorlanabilir. Bir sayfayı tanımlayan birincil işaretleme tek bir benzersiz XAML namescope'u gösterir ve XAML namescope sınırı bu sayfanın kök öğesi olur. Ancak, çalışma zamanında bir sayfayla etkileşime geçen diğer işaretleme kaynakları(stiller içindeki stiller veya şablonlar gibi) ve bu işaretleme kaynaklarının genellikle sayfanın XAML ad kapsamlarına bağlanması gerek olmayan kendi XAML ad kapsamları vardır. ve x:Name XAML ad kapsamları hakkında daha fazla bilgi için bkz. Name , x:Name Yönergesiveya WPF XAML Namescopes.

Ekli özellikler ve ekli olaylar

XAML, belirli özelliklerin veya olayların, ayar yapmakta olduğu öğe için türün tanımlarında olup olmadığına bakılmaksızın herhangi bir öğede belirtilebilecek bir dil özelliği belirtir. Bu özelliğin özellikler sürümü ekli özellik olarak, olaylar sürümü ise ekli olay olarak adlandırılan bir özelliktir. Kavramsal olarak, ekli özellikleri ve ekli olayları herhangi bir XAML öğesi/nesne örneğinde ayarlan bir genel üye olarak düşünebilirsiniz. Ancak, bu öğe/sınıf veya daha büyük bir altyapı, ekli değerler için bir destek özellik depolarını desteklemeli.

XAML'de ekli özellikler genellikle öznitelik söz dizimi aracılığıyla kullanılır. Öznitelik söz dizimsinde, formunda ekli bir özellik ownerType.propertyName belirtirsiniz.

Yüzeysel olarak, bu bir özellik öğesi kullanımına benzer, ancak bu durumda belirttiğiniz her zaman ekli özelliğin ayar bulunduğu nesne ownerType öğesinden farklı bir tür olur. ownerType , ekli özellik değerini almak veya ayarlamak için XAML işlemcisi tarafından gereken erişimci yöntemlerini sağlayan tür.

Ekli özellikler için en yaygın senaryo, alt öğelerin bir özellik değerini üst öğelerine bildirmesini sağlamaktır.

Aşağıdaki örnek ekli DockPanel.Dock özelliği göstermektedir. sınıfı DockPanel için erişimcileri tanımlar DockPanel.Dock ve bu nedenle ekli özelliğin sahibi olur. sınıfı ayrıca alt öğelerini yineler ve her öğeyi belirli bir değeri için DockPanel kontrol eden mantık DockPanel.Dock içerir. Bir değer bulunursa, bu değer düzen sırasında alt öğeleri konumlandırmak için kullanılır. Ekli özelliğin ve bu konumlandırma özelliğinin kullanımı aslında DockPanel.Dock sınıfı için motivasyon DockPanel senaryosudur.

<DockPanel>
  <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button>
  <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button>
</DockPanel>

WPF'de, eklenen özelliklerin çoğu veya hepsi bağımlılık özellikleri olarak da uygulanır. Daha fazla bilgi için bkz. Ekli Özelliklere Genel Bakış.

Eklenen olaylar benzer bir öznitelik ownerType.eventName söz dizimi biçimi kullanır. Ekli olmayan olaylar gibi, XAML'de ekli bir olayın öznitelik değeri, öğesinde olay işleyicisi işleyicisi olduğunda çağrılan işleyici yönteminin adını belirtir. WPF XAML'de ekli olay kullanımları daha az yaygındır. Daha fazla bilgi için bkz. Ekli Olaylara Genel Bakış.

Temel türler ve XAML

Temel WPF XAML ve onun XAML ad alanı, XAML için işaretleme öğelerine ek olarak CLR nesnelerine karşılık gelen türler koleksiyonudur. Ancak, tüm sınıflar öğelere eşlenmiş değildir. gibi soyut sınıflar ButtonBase ve bazı soyut olmayan temel sınıflar CLR nesneleri modelinde devralma için kullanılır. Soyut sınıflar da dahil olmak üzere temel sınıflar, somut XAML öğelerinin her biri hiyerarşisinde bazı temel sınıflardan üyeleri devralan XAML geliştirme için hala önemlidir. Bu üyeler genellikle öğede öznitelik olarak ayarlan bir özellik veya işilebilecek olaylar içerir. FrameworkElement , WPF'nin WPF çerçeve düzeyindeki somut temel kullanıcı arabirimi sınıfıdır. Kullanıcı arabirimini tasarlarken, hepsi öğesinden türeten çeşitli şekil, panel, dekoratör veya denetim sınıfları FrameworkElement kullanır. İlgili temel sınıf olan , içinde API'leri bilinçli olarak yansıtan API'leri kullanarak akış düzeni sunumu için iyi şekilde çalışan belge FrameworkContentElement odaklı öğeleri FrameworkElement destekler. Öğe düzeyindeki özniteliklerin ve CLR nesne modelinin birleşimi, belirli XAML öğesi ve temel türü ne olursa olsun çoğu somut XAML öğesinde ayarlanamayan ortak özellikler kümesi sağlar.

XAML güvenliği

XAML, nesne örneği oluşturma ve yürütmeyi doğrudan temsil eden bir işaretleme dilidir. Bu nedenle, XAML'de oluşturulan öğeler, eşdeğer oluşturulan kodla aynı sistem kaynaklarıyla (örneğin ağ erişimi, dosya sistemi IO'su) etkileşim kurma becerisine sahiptir. Tam olarak güvenilen bir uygulamaya yüklenen XAML, sistem kaynaklarına barındırma uygulamasıyla aynı erişime sahiptir.

WPF'de Kod Erişim Güvenliği (CAS)

.NET Framework IÇIN WPF, Kod Erişim Güvenliği'ne (CAS) destek sağlar. Bu, internet bölgesinde çalışan WPF içeriğinin daha düşük yürütme izinlerine sahip olduğu anlamına gelir. "Gevşek XAML" (XAML görüntüleyicisi tarafından yükleme zamanında yorumlanır, derlemeyen XAML sayfaları) ve XBAP genellikle bu internet bölgesinde çalışır ve aynı izin kümesi kullanılır. Ancak, tam olarak güvenilen bir uygulamaya yüklenen XAML, sistem kaynaklarına barındırma uygulamasıyla aynı erişime sahiptir. Daha fazla bilgi için bkz. WPF Kısmi Güven Güvenliği.

Koddan XAML yükleme

XAML tüm kullanıcı arabirimini tanımlamak için kullanılabilir, ancak bazen XAML'de kullanıcı arabiriminin yalnızca bir parçasını tanımlamak da uygundur. Bu özellik kısmi özelleştirmeyi, bilgilerin yerel olarak depolanmasına, bir iş nesnesi sağlamak için XAML'nin kullanımına veya çeşitli olası senaryolara olanak sağlamak için kullanılabilir. Bu senaryoların anahtarı sınıfı XamlReader ve Load yöntemidir. Giriş bir XAML dosyasıdır ve çıkış, bu işaretlemeden oluşturulan tüm çalışma zamanı nesnelerini temsil eden bir nesnedir. Ardından, nesneyi uygulamada zaten var olan başka bir nesnenin özelliği olacak şekilde ekebilirsiniz. Özellik, içerik modelinde son görüntüleme özelliklerine sahip uygun bir özellik olduğu ve yürütme altyapısına uygulamaya yeni içeriğin ekli olduğunu bildiren uygun bir özellik olduğu sürece, çalışan bir uygulamanın içeriğini XAML'ye yükerek kolayca değiştirebilirsiniz. Daha .NET Framework için bu özellik genellikle yalnızca tam güvene sahip uygulamalarda kullanılabilir, çünkü dosyaları çalıştırarak uygulamalara yüklemenin belirgin güvenlik etkileri vardır.

Ayrıca bkz.