pillinetwork hesabınızla giriş yapın.

xaml ile dinamik kod çalıştırma

kodaman.org yeni bir oluşum olduğu için ne kadar ilgileneni var bilemiyorum ama benim ilk yazım microsoft'un hem windows presentation foundation'da hem de silverlight'da ortak kullandığı xaml hakkında olacak.

xaml ile dinamik olarak herhangi bir dış kaynaktan penceremizin içerisine kod ekleyebilmemiz mümkün. bu ne işimize mi yarar? eğer programlarımızda değişen reklam alanlarına veya kullanıcı girdisine göre oluşacak static bir animasyondan fazlasına ihtiyacımız olduğunda bize yardımcı olur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using Sys = System;
using SysIO = System.IO;
using SysWinMarkup = System.Windows.Markup;
using SysXml = System.Xml;
using SysXmlLinq = System.Xml.Linq;
public static class XamlUtils {
public static object GetXamlObject(string source) {
SysXml.XmlDocument _xmlDocument = new SysXml.XmlDocument();
_xmlDocument.LoadXml(source);
return Xaml.GetXamlObject(_xmlDocument);
}
public static object GetXamlObject(SysXml.XmlDocument xmlDocument) {
const string xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
const string xmlns_x = "http://schemas.microsoft.com/winfx/2006/xaml";
if(string.IsNullOrEmpty(xmlDocument.DocumentElement.GetAttribute("xmlns"))) {
xmlDocument.DocumentElement.SetAttribute("xmlns", xmlns);
}
if(string.IsNullOrEmpty(xmlDocument.DocumentElement.GetAttribute("xmlns:x"))) {
xmlDocument.DocumentElement.SetAttribute("xmlns:x", xmlns_x);
}
SysIO.TextReader _stringReader = new SysIO.StringReader(xmlDocument.OuterXml);
SysXml.XmlReader _xmlReader = new SysXml.XmlTextReader(_stringReader);
return SysWinMarkup.XamlReader.Load(_xmlReader);
}
}

Geldik "nasıl kullanırız?" sorusuna, öncelikle dinamik olarak yüklenecek xaml'in ilk element'inin hangi nesne olacağı bizim için önemli. Ben örneğimde System.Windows.Controls namespace'i altındaki Grid'i ele alacağım, sizin kullanımınızda Canvas, StackPanel, Button, Image olabilir; bu konuda tamamen özgürsünüz.

1
2
System.Windows.Controls.Grid _gridObject = XamlUtils.GetXamlObject("<Grid><TextBlock>ok</TextBlock></Grid>") as System.Windows.Controls.Grid;
this.Content = _gridObject;

Yukarıdaki örnekte ben kodu kullandığımız pencerenin içeriğini tamamen xaml string'inden yüklenen xaml'e eşitledim, siz StackPanel gibi bir kontrol kullanıyorsanız. (kontrolismi).Children.Add(_gridObject) gibi bir komutla xaml'i başka bir kontrol içerisine de yerleştirebilirsiniz.

/* Etiketler: , , */
/* laroux yazdı. 13 Kasım 2008 13:30. 2 yorum var */

Yorumlar

xaml nin aslında alışanlar için kullanım kolaylıkları var, edit lemesi kolay oluyor formu.
silverlight kullanmadım daha ama MS in taktik yine aynı: bir kaç platformun teknolojilerini bir potada eritmek bu sayede birini öğrenen diğerini de kolayca kullanabilmesi ( ve MSden vazgeçememesi =)

eline sağlık açıklayını olmuş

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork