
Eminim WPF ile geliştirme yapan herkes native Win32 formları aradaki font rendering farkının bilincindedir. TextBlock/Label objeleri bir resim ile birlikte aynı container içerisinde render edilirken daha da flu bir hal alıyorlar.
Microsoft bu durumun farkında, diğer yandan konuyla ilgili şikayetler de artmaktayken eğer siz de bu durumdan müzdaripseniz .Net Framework’ün bir sonraki sürümünü beklemek yerine “Give me back my ClearType” isimli yazıyı okuyarak sorunun üstesinden gelebilirsiniz.
XAML ile ilgili yaptığım bir araştırma esnasında dış bir kaynaktan gelen kodu XAML içerisinde nasıl çalıştıracağım konusunda bir kaç örnekle karşılaştım. Eğer özellikle banner rotation yapacaksanız, veya canlı bir feed’i tamamiyle dışarıdan almayı düşünüyorsanız eminim oldukça işe yarayacaktır.
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);
}
}
Kullanımı:
System.Windows.Controls.Grid _gridObject = XamlUtils.GetXamlObject("<grid><textblock>ok</textblock></grid>") as System.Windows.Controls.Grid;
this.Content = _gridObject;
Görüldüğü gibi, dış bir kaynaktan alınan/okunan string’i XamlUtils.GetXamlObject metodu ile XAML’e dönüştürebiliyoruz. Burada dikkat etmemiz gereken bu metoddan dönen objenin XAML’in root element’ine düzgün cast edilmesinin gerekliliği. (Örnekte root element’i Grid olarak ele aldım)
Son iki haftamı Windows Presentation Foundation ve XAML üzerine çalışarak geçirdim. Şimdiden ileride HTML’in dahi yerini alabilecek kadar geniş ele alınmış olduğunu söyleyebilirim.
Aslında Microsoft’un bu teknolojiler hakkındaki tutumu beni biraz şaşırtıyor; Öncelikle Silverlight hakkında WPF’nin “basit” hali ve Microsoft’un Adobe Flash’a alternatifi diyebiliriz. Adobe’un Flash’da ActionScript kullandırıyor olması gibi Silverlight için JavaScript ve C# kullanabileceğiz ama Silverlight ile hiç bir zaman WPF’nin gücüne erişemeyeceğiz.
Silverlight 2 ile vaad edilenler:
http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx
Microsoft’un Silverlight Sitesi:
http://silverlight.net/default.aspx
Gelelim WPF’e;
Silverlight ve WPF aynı kütüphaneleri kullanmadığı için Silverlight’a eklenen yenilikler için WPF’de biraz beklememiz gerekecek gibi görünüyor. Çünkü Microsoft’un şu anki politikasına göre WPF ancak ve ancak .NET Framework sürümleri ile güncellenecek.
Yine de tekrar edeyim, Silverlight ile yaptıklarınız WPF ile yapacaklarınızın yanında hiç kalıyor. Çünkü WPF ile muhasebe programından 3d oyuna kadar herşeyi tasarlayabiliyoruz.
WPF 3.5 SP1:
http://windowsclient.net/wpf/wpf35/wpf-whats-new-35sp1.aspx
Microsoft’un WPF Sitesi:
http://windowsclient.net/