XAML Üzerinde Programatik İşlemler

Not : Bu yazı Aykut TAŞDELEN’in WPF kitabından alıntıdır izinsiz kullanımı suçtur ! Konuyla ilgili diğer kısımlar kitapta yer almaktadır.

XAML kodları ve dosyaları üzerinde programatik okuma ve yazma işlemleri gerçekleştirilebilir. System.Windows.Markup namespace’indeki XamlReader ve XamlWriter sınıfları bu işlemler için özelleşmiştir.

XamlReader sınıfına ilişkin Load() ve LoadAsync() metotları senkon ve asenkron biçimde xaml içeriğini uygun bir WPF nesnesine yüklemeye yarar.  Örneğin aşağıdaki kod, bir string değişkende tutulmakta olan xaml içeriğinin (bu bir .xaml dosyasından okunarak elde edilmiş de olabilirdi) Canvas nesnesine yüklenmesini ve bu içerikte bulunan btnTest isimli düğmenin FindName() ile bulunarak content’inin değiştirilmesini örneklemektedir.

string xmal = @”<Canvas Width=’400′ Height=’350′ xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8217; xmlns:sys=’clr-namespace:System;assembly=mscorlib’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’&gt;

<Rectangle Height = ‘100’ Canvas.Left = ‘100’ Canvas.Top=’100′ Fill=’Gray’>

<Rectangle.Width>

100

</Rectangle.Width>

</Rectangle>

<Polygon Stroke=’Blue’ Points=’0, 0 100, 100 50, 30′>

</Polygon>

<Button Name=’btnTest’ Width=’100′ Height=’30’ Canvas.Top=’50’ Canvas.Left=’60’> Okay </Button>

<ListBox Width=’200′ Height=’300′ Canvas.Left=’170′ Canvas.Top=’50’>

<Rectangle Width=’50’ Height=’15’ Fill=’Navy’>

</Rectangle>

<ListBoxItem> 200 </ListBoxItem>

<ListBoxItem> 300 </ListBoxItem>

</ListBox>

</Canvas>

“;

 

Canvas canvas = (Canvas) XamlReader.Load(
                new XmlTextReader(new StringReader(xmal)));

 

this.Content = canvas;

Button button = (Button) canvas.FindName(“btnTest”);

button.Content = “Test”;

 

Aşağıdaki örnekteyse bir Button nesnesinin Save() ile XAML’e kaydedilişi ve sonra tekrar yüklenişi gösterilmiştir :

Button btn = new Button();

btn.Height = 40;

btn.Width = 80;

btn.Background = Brushes.Azure;

btn.Content = “Deneme”;

 

// Kaydet

string strBtn = XamlWriter.Save(btn);

 

// Yükle

StringReader stringReader = new StringReader(strBtn);

XmlReader xmlReader = XmlReader.Create(stringReader);

Button btn2 = (Button)XamlReader.Load(xmlReader);

 

this.Content = btn2;

Reklamlar