XAML - İşaretleme Uzantıları
XAML uygulamalarında, işaretleme uzantıları, ne belirli bir XAML nesnesi ne de ilkel bir tür olan bir değeri elde etmeye yönelik bir yöntem / tekniktir. Biçimlendirme uzantıları, küme parantezlerinin açılıp kapatılmasıyla tanımlanabilir ve bu küme parantezlerinin içinde biçimlendirme uzantısının kapsamı tanımlanır.
Veri bağlama ve statik kaynaklar, biçimlendirme uzantılarıdır. Önceden tanımlanmış bazı XAML biçimlendirme uzantıları vardır:System.xaml kullanılabilir.
Şimdi basit bir örneğe bakalım. StaticResources önceden tanımlanmış bir XAML biçimlendirme uzantısı olan biçimlendirme uzantısı kullanılır.
Aşağıdaki XAML kodu, bazı özelliklere sahip iki metin bloğu oluşturur ve bunların ön planı, Window.Resources.
<Window x:Class = "XAMLStaticResourcesMarkupExtension.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "525">
<Window.Resources>
<SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush>
</Window.Resources>
<Grid>
<StackPanel Orientation = "Vertical">
<TextBlock Foreground = "{StaticResource myBrush}" Text = "First Name"
Width = "100" Margin = "10" />
<TextBlock Foreground = "{StaticResource myBrush}" Text = "Last Name"
Width = "100" Margin = "10" />
</StackPanel>
</Grid>
</Window>
İçinde Window.Resources, görebilirsin x:Key bir kaynak sözlüğündeki bir kaynağı tanımlamak için XAML tanımlı bir sözlükte oluşturulan ve başvurulan öğeleri benzersiz şekilde tanımlayan kullanılır.
Yukarıdaki kodu derleyip çalıştırdığınızda, aşağıdaki MainWindow'u üretecektir. Ön plan rengi mavi olan iki metin bloğunu görebilirsiniz.
XAML'de, özel işaretleme uzantıları, MarkupExtension sınıfını miras alarak ve MarkupExtension sınıfındaki soyut bir yöntem olan ProvideValue yöntemini geçersiz kılarak da tanımlanabilir.
Özel biçimlendirme uzantısının basit bir örneğine bakalım.
<Window x:Class = "XAMLMarkupExtension.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my = "clr-namespace:XAMLMarkupExtension"
Title = "MainWindow" Height = "350" Width = "525">
<Grid>
<Button Content = "{my:MyMarkupExtension FirstStr = Markup, SecondStr = Extension}"
Width = "200" Height = "20" />
</Grid>
</Window>
Yukarıdaki XAML kodunda, bazı özelliklerle bir düğme oluşturulur ve içerik değeri için özel bir biçimlendirme uzantısı (my:MyMarkupExtension) Sırasıyla FirstStr ve SecondStr'ye atanan "Markup" ve "Extension" iki değeriyle kullanılmıştır.
Aslında, aşağıdaki C # uygulamasında gösterildiği gibi MyMarkupExtension
türetilen bir sınıftır MarkupExtension
. Bu sınıf, birleştirilmiş ve bu dizeyi ProvideValue yönteminden bir düğmenin İçeriğine döndüren FirstStr ve SecondStr olmak üzere iki dize değişkeni içerir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace XAMLMarkupExtension {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
public class MyMarkupExtension : MarkupExtension {
public MyMarkupExtension() { }
public String FirstStr { get; set; }
public String SecondStr { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider) {
return FirstStr + " " + SecondStr;
}
}
}
Şimdi bu uygulamayı çalıştıralım ve MainWindow'umuzda "biçimlendirme uzantısının" buton içeriği olarak başarıyla kullanıldığını hemen görebilirsiniz.