İlkay İlknur

just a developer...

C# 5.0 Asenkron Programlama Özelliklerini .NET Framework 4.0, Windows Phone 7.5 & 8.0 ve Silverlight 4.0 & 5.0 Platformlarında Kullanın

Blogda bulunan C# 5.0 Asenkron programa ilgili makaleleri okuyanlardan zaman zaman "Acaba bu özellikleri .NET 4.0 veya Windows Phone 7.5 gibi platformlarda kullanabiliyor muyuz ? " gibi mailler alıyorum. Tabi .NET 4.0 kullananlar için projenizi .NET 4.5'e yükseltip kullanın demek verilebilecek en kolay cevap :) Ama tabi projeyi yükseltin demek her zaman söylendiği kadar kolay olamayabiliyor :) Çok kapsamlı çalışmaların, testlerin yapılması gerekebiliyor. Bu nedenle tabi ki insanlar projeyi yükseltmekten ziyade daha kolay yoldan bu özellikleri kullanabilmeyi tercih edebiliyorlar. Windows Phone veya Silverlight tarafına geçtiğimizde ise tabi ki C# 5.0 compilerının yanında compilerın arka planda kullandığı yapılarında bu platformlara taşınmış olması gerekiyor. Neyse çok fazla uzatmayalım ve şöyle Visual Studio 2012 ile .NET Framework 4.0 'da bir Console uygulaması yaratalım ve duruma bir bakalım :)

Şimdi basit bir async metot yazmaya çalışalım ve bakalım nasıl bir durumla karşı karşıya kalacağız.

Çok basit bir şekilde C# 5.0 ile yapabildiğimiz, bir işlemi arka planda çalıştırma olayını .NET Framework 4.0 ile gerçekleştirdik. Şimdi projemizi derleyelim ve bakalım bir sorun ile karşılaşacak mıyız ?

Mesaj aslında oldukça net :) Async ve await keywordlerini C# 5.0 compilerını kullandığımız için kullanabilmekteyiz. Ancak compilerın arka planda kullanacağı tipler haliyle .NET Framework 4.0 içerisinde bulunmuyor ve compiler da haliyle kodu arka planda yeniden yazmak için bu tiplere ihtiyaç duyuyor . Peki compilerın ihtiyacı olan bu tipleri acaba dışarıdan bir library aracılığıyla versek :) kısayoldan sonuca ulaşabilir miyiz ?

Microsoft.Bcl.Async

Microsoft.Bcl.Async nuget paketi Microsoft tarafından geliştirilen ve .NET Framework 4.0, Windows Phone 7.5 / 8.0 ve Silverlight 4.0/5.0 platformları için compilerın arka planda ihtiyaç duyduğu tipleri içerisinde barındıran bir paket. Bunun yanında ilgili platformlarda bulunan bazı tiplere task-based asenkron metotlar da extension metot olarak bu paket sayesinde gelmekte. O zaman bu package'ı projemize ekleyelim ve bakalım nasıl bir değişiklik olacak.

Microsoft.Bcl.Async paketini proye ekledikten sonra projemiz sorunsuz bir şekilde derlendi. Bunun yanında eğer WebClient tipi gibi içerisinde asenkron metotlar bulunan tiplere bakarsak bu tipler içerisinde de task-based asenkron metotların extension metotlar olarak eklendiğini görüyor olacağız.

Gördüğünüz gibi artık C'# 5.0 özelliklerini .NET 4.0, Silverlight ve Windows Phone'da kullanmak oldukça kolay :)  Yapmanız gereken tek şey proje solutionınızı Visual Studio 2012'ye yükseltemek. Evet yanlış okumadınız :) Şu ana kadar yaptıklarımız sadece Visual Studio 2012 içerisinde geçerli. En azından sizi framework upgrade'inden kurtardım ;) Umarım sizler için faydalı bir yazı olmuştur.


C# 5.0 - Caller Info Attributes ile Kolaylaşan INotifyPropertyChanged İmplementasyonu

Windows 8, Windows Phone 7, Silverlight ve WPF ile uygulama gelistirirken kullandigimiz ve MVVM gibi senaryolarda da siklikla basvurdugumuz INotifyPropertyChanged implementasyonu çogu zaman eger bir kod snippeti kullanmiyorsaniz biraz can sikici ve zaman kaybedici bir implemantasyon olabilmekte.

INotifyPropertyChanged interface'ini neden kullandigimizi kisaca hatirlamamiz gerekirse, elimizde bulunan tiplerin binding islemlerinde içlerinde barindirdiklari propertylerde bir degisiklik oldugu durumlarda bagli olduklari UI kontrolü üzerinde durumlarini  güncellemeleri için gerekli olan elemanlari saglamakta INotifyPropertyChanged interface'i.

INotifyPropertyChanged interface'inin içerisine baktigimizda ise çok basit bir sekilde sadece 1 event ile karsilasiyoruz.

namespace System.ComponentModel
{
    public interface INotifyPropertyChanged
    {
        event PropertyChangedEventHandler PropertyChanged;
    }
}

Evet interface implementasyonu aslinda sadece 1 eventin tetiklenmesini gerektiriyor. Bu eventi tetiklerken bir de hangi propertynin degerinin degistigini de eventi tetikleme sirasinda bildirmemiz gerekiyor ki bizim eventimizi dinleyen kontroller degisen propertynin hangisi oldugunu algilayabilsin ve buna göre de sadece degisen propertynin degerini ekranda güncellesin.

Simdi hemen basitçe Insan isminde bir tip tanimlayalim ve bu tip içerisinde Ad ve Soyad isimli property ekleyelim ve bu propertylerde de degisiklik oldugunda bind edildikleri kontrollerde de ilgili degisikliklerin yansitilmasi için bir de INotifyPropertyChanged interface'ini implemente edelim.

public class Insan : INotifyPropertyChanged
{
    private string ad;

    public string Ad
    {
        get { return ad; }
        set
        {
            ad = value;
            RaisePropertyChanged("Ad");
        }
    }

    private string soyad;

    public string Soyad
    {
        get { return soyad; }
        set
        {
            soyad = value;
            RaisePropertyChanged("Soyad");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));
        }
    }
}

Evet implementasyon bu kadar basit. Farketmis oldugunuz ilk sey eminim ki auto-implemented property kullanmayisimizdir. Çünkü burada ilgili propertye deger atanma sirasinda araya girmemiz gerekmekte. Bu nedenle auto-implemented property kullanamiyoruz. Bunun haricinde ise interface içerisinde bulunan eventi gerekli parametrelerle tetiklemek için RaisePropertyChanged isimli bir de yardimci metot yazdik. Bu metotta parametre olarak içerigi degisen propertynin ismini almakta. Daha sonra ise yazmis oldugumuz bu metodu propertylerin setterlari içerisinde çagirmaktayiz.

C# 5.0 - Caller Info Attributes ile Basitlesen Implementasyon

Yukaridaki implementasyona baktigimizda aslinda bize zaman kaybettiren ve interface'in implementasyonunu zorlastiran nokta aslinda RaisePropertyChanged metodunu çagirirken sürekli olarak degisen propertynin ismini vermemiz.

Simdi C# 5.0 ile beraber CallerInfo Attributes konusunu hatirlarsak aslinda Caller Info Attributes bize yapilan bir çagrim  ile ilgili olarak bilgi vermekteydi. Yani çagrim yapilan yerin satiri, bulundugu dosya ve çagrimda bulunan üyenin adi gibi alanlari saglamaktaydi. Sanki çagrim yapan üyenin adi tam bizim ihtiyacimiz olan sey :) O zaman RaisePropertyChanged metodunu su sekilde degistirsek nasil olur bir bakalim :)

public void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));
    }
}

Gördügümüz gibi bu sekilde artik metodu çagiran üyenin adini C# 5.0 ile beraber gelen Caller Info Attributes ile alabilmekteyiz. Insan tipi içerisinde bulunan propertylerin setterlarinda da artik RaisePropertyChanged metodunu parametre vererek çagirmamiza gerek yok. Çünkü compiler bu parametreyi artik kendisi arka planda ilgili metoda opsiyonel parametre degeri olarak geçirmekte.

Son olarak Insan tipinin içerigi su sekilde olmakta.

public class Insan : INotifyPropertyChanged
{
    private string ad;

    public string Ad
    {
        get { return ad; }
        set
        {
            ad = value;
            RaisePropertyChanged();
        }
    }

    private string soyad;

    public string Soyad
    {
        get { return soyad; }
        set
        {
            soyad = value;
            RaisePropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged([CallerMemberName]string propertyName = null)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));
        }
    }
}

Baktigimizda aslinda programalama dili tarafinda gelen bir yenilik bambaska bir tarafta belki de hiç aklimiza gelmeyecek bir noktada gördügünüz gibi isimizi kolaylastiriyor. Iste programlama dillerinin de en güzel yani bu :)

Hepinize kolay gelsin :)



Her Silverlight Developer Aynı Zamanda Bir Windows Phone Developerdır

Merhaba Arkadaşlar,

Başlığa baktığınızda aslında oldukça iddialı bir cümle olduğunu düşünüyor olabilirsiniz. Ancak Microsoft’un Silverlight’ı Windows Phone 7 için geliştirme platformu olarak belirlemesiyle özellikle Silverlight developerlar için oldukça güzel bir kapı açılmakta. Web üzerinde Cross-browser ve Cross-Platform(Windows –Mac) olarak çalışan uygulamalarımız artık doğru programlama tekniklerini kullanırsak sadece arayüz değişikliği yapmak suretiyle Windows Phone 7 işletim sistemi yüklü telefonlarda da çalışıyor duruma gelebilmekte.

Windows Phone 7 Telefon Spesifikasyonları

Microsoft tarafında Windows Phone 7 ile beraber baktığımızda yeni bir yaklaşımın olduğunu görmekteyiz. Bu da artık tüm telefonlar üzerinde çalışacak bir işletim sistemi yerine belirli spesifikasyonlara sahip telefonlar üzerinde çalışacak bir işletim sistemi geliştirme yaklaşımı. Bu yaklaşım ile artık birtakım özellikler telefonlar üzerinde standart olarak bulunmakta. Böylece hem işletim sistemi bu özellikleri kullanarak daha performanslı ve etkin çalışmakta hem de biz yazılım geliştiriciler üzerinde yazılım geliştirdiğimiz telefonların standartlarını bilmekteyiz.

Şimdi isterseniz Windows Phone 7 işletim sistemine sahip olacak telefonların spesifikasyonlarına bir göz atalım.

Ekran : Windows Phone 7 işletim sistemlerine sahip telefonlarda 480x800 çözünürlüğünde ekranlar şu anda  standart olarak bulunmakta. Ancak gelecekte 320x480 çözünürlüğünde ekranlara sahip telefonlar da raflardaki yerini alıyor olacak. Ancak bu çözünürlükler dışındaki telefonlarda Windows Phone 7 işletim sistemi olması söz konusu değil.

Dokunmatik Ekran : Windows Phone 7 işletim sistemine sahip telefonlarda en az 4 adet dokunma noktası bulunmakta.

Sensörler : Windows Phone 7 işletim sistemine sahip telefonlarda Lokasyon tespiti için GPS ve  telefonun hareketlerini algılamak için de Accelerometer sensörleri bulunmakta.

Kamera : Windows Phone 7 işletim sistemine sahip telefonlarda 5 megapiksel veya üzerinde kamera bulunmakta.

Butonlar : Windows Phone 7 işletim sistemine sahip telefonlarda standart olarak telefonun üzerinde 3 adet buton bulunmakta. Bunlar geri tuşu, arama tuşu ve start tuşu.

Diğer standart özellikleri ise yukarıdaki resimden görebilirsiniz.

Windows Phone 7 Uygulama Geliştirme Ortamı

Evet aslında biz yazılım geliştiricilerin merak beklediği kısma geldik. Yazılım geliştirme ortamları. Windows Phone 7 işletim sistemi üzerinde uygulamalar geliştirmek için kullanabileceğimiz 2 platform bulunmakta. Bunlar XNA ve Silverlight. Özellikle oyun gerçekleştirmeyi düşünüyorsanız 2D ve 3D desteği dolayı XNA’I tercih edebilirsiniz. Bunun yanında daha veri odaklı uygulamalarda Silverlight tarafını tercih etmek daha doğru olacaktır. Bunun yanında tabi bazı ortak XNA kütüphanelerinin Silverlight uygulaması içerisinde de kullanılabilmesi mümkün. Ancak bu ortak kütüphaneler dışındaki kütüphaneleri kullanacaksak uygulamamızı XNA kullanarak geliştirmek durumundayız.

Geliştirme ortamı için gerekli kurulumu buradan indirebilirsiniz. Kurulumları yaptıktan sonra bilgisayarınıza aşağıdaki programların kurulduğunu göreceksiniz.

  • Visual Studio 2010 Express for Windows Phone
  • Expression Blend 4 Express for Windows Phone

Eğer bilgisayarınızda Visual Studio veya Expression Blend’in diğer ileri sürümleri var ise gerekli araçlar varolan uygulamalarınıza entegre olmakta. Ve tüm bunların yanında en önemli nokta ise bu araçların hepsinin ÜCRETSİZ olması.

İlk Windows Phone 7 Uygulaması – Hello World !

Windows Phone 7 ile ilgili genel bilgileri verdikten sonra gelelim konunun pratik tarafına. Yukarıda belirttiğim kurulumu yaptıktan sonra Visual Studio’yu açtıktan sonra File –> New Project yolunu izlediğimizde sol tarafta bulunan proje tiplerinde bir yenilik gözümüze çarpıyor.

“Silverlight for Windows Phone” seçeneği proje tipleri içerisine kurulum sonrasında eklenmekte. Bu proje tipi içerisinde farklı uygulama tipleri bulunmakta. Bunlar ,

Windows Phone Application : Klasik Page tabanlı Windows Phone uygulaması geliştirmek için kullanabileceğimiz proje tipi. Silverlight uygulaması geliştirirken seçtiğimiz Silverlight Application uygulama tipinin Windows Phone tarafındaki karşılığı diyebiliriz.

Windows Phone Databound Application : Windows Phone üzerinde özellikle veri listeleme tabanlı bir uygulama geliştireceksek bu proje tipi bizlere giriş yapmak amacıyla oldukça yardımcı olacaktır. Özellikle içerisinde barındırdığı şablon ile veri listeleme işlemlerinin nasıl yapılacağı konusunda bizlere yardımcı olacaktır. Bu proje tipinden bir uygulama yarattığınızda doğrudan uygulamayı çalıştırarak veri listeleyen örnek bir uygulama görebilirsiniz.

Windows Phone Class Library : Windows Phone uygulamaları için library geliştirmek amacıyla kullanacağımız proje tipi.

Windows Phone Panaroma Application : Windows Phone uygulamalardaki bana göre en önemli kontrollerden olan Pivot ve Panaroma kontrollerinden Panaroma kontrolünün örnek bir kullanımını içerisinde barındıran proje tipi.

Windows Phone Pivot Application : Yukarıda bahsettiğim Pivot kontrolünün örnek bir kullanımının bulunduğu proje tipi.

Ayrıca yazımızının başlarında Windows Phone üzerinde XNA kullanılarakta uygulama geliştirilebildiğinden bahsetmiştim. Doğrudan XNA platformunu kullanarak uygulama geliştirmek istersekte soldan XNA uygulama seçeneğini seçerek buradan uygun olan proje tipini seçebiliriz.

XNA tarafına baktığımızda ise Windows Phone Game ile Windows Phone Game Library proje tipleri çıkmakta. İsimlerden de anlayacağınız üzere çok fazla ayrıntıya girmeye gerek olmadığını düşünüyorum. :)

Windows Phone Uygulama Yapısı

Peki klasik bir Windows Phone uygulaması içerisinde ne gibi bileşenler bulunmakta derseniz hemen bir Windows Phone Application yaratıp proje içerisindeki bileşenleri inceleyelim.

App.xaml : Silverlight uygulamalarından da aşina olduğumuz App.xaml Windows Phone uygulamalarında da Silverlight uygulamalarında olduğu gibi benzer durumlarda kullanılmakta. Örneğin uygulama çapında bir resource tanımlamak istersek bunun için App.xaml ‘ı kullanabiliriz. Bunun yanında belki de en önemli kullanım amaçlarından biri  de uygulama çapında meydana gelen bazı eventlerin yakalanarak handle edilmesi yine bu sınıf üzerindenm sağlanmakta. Bu eventlerin neler olduğuna ilerleyen yazılarımızda değiniyor olacağız.

ApplicationIcon.png : Uygulama telefon üzerindeki menü üzerinde görüntülendiğinde yanında bulunacak olan uygulama iconu.

Background.png : Uygulama içerisinde arka plan olarak kullanılabilecek olan Image.

SplashScreenImage.jpg : Uygulamanın telefon kullanıcısı tarafından seçilip başlatılmasıyla uygulamanın telefon üzerinde çalışmasına kadar geçen sürede ekranda gösterilecek olan resim.

Windows Phone Emulator

Windows Phone uygulaması geliştirmek için illa ki bir Windows Phone 7 işletim sistemi yüklü bir telefona sahip olmak zorunda değiliz. Bunun yerine uygulamalarımızı Windows Phone işletim sistemine sahip bir emülatör üzerinde test edebiliriz. Bu emülatör aslında Windows Phone 7 işletim sistemini içerisinde çalıştıran bir sanal makina. Böylece uygulamalarımızı bu emülatör içerisine deploy edip uygulamamızı çalışmasını dorğudan emülatör üzerinde izleyebilir ve test edebiliriz. Bunun yanında tabi ki Visual Studio içerisindeki seçenek yardımıyla uygulamaları doğrudan emülatör yerine Windows Phone 7 işletim sistemine sahip telefonumuza da yükleyip, test edebiliriz.

Uygulamayı doğrudan emülatörü seçerek çalıştırdığımızda ise öncelikli olarak emülatör çalışmakta daha sonra uygulamamız yüklenerek çalışmaktadır.

Emülatöre baktığımızda ise aslında emülatörün pek çok önemli işlevsellikleri bulunmakta. Emülatörü istediğimiz yönlere çevirebilmekte ve istediğimiz durumlarda emülatörden bir takım verileri alabilmekteyiz. Ancak bunun yanında tabi bazı durumlarda emülatör bize yardımcı olamamakta. Bu gibi durumlarda ise bazı extensionlar bizim yardımımıza koşmakta. Bu konulara da ilerleyen yazılarda değiniyor olacağız.

Evet arkadaşlar bu yazımızda Windows Phone 7 Uygulama geliştirme dünyasına giriş yaptık. İlerleyen yazılarımızda Windows Phone 7 üzerinde uygulama geliştirme ile ilgili daha detaya giriyor olacağız.

Görüşmek üzere,



Windows Phone 7 Uygulamalarında Orientation Kontrolü

Merhaba Arkadaşlar,

Bu yazımızda Windows Phone 7 uygulamalarında telefonun oryantasyonun değiştiğinde uygulamamızın bu değişime nasıl cevap verebileceği konusunu incelemeye çalışacağız. Tabi oryantasyon kelimesini okurken tam olarak neyi kastetmek istediğimi anlamamış olabilirsiniz. Orientation kelimesinin Türkçe karşılığı olarak kullanmaya çalıştığım bu kelimede aslında telefonun yönünün çevrilerek uygulama içerisindeki ekranların farklı kullanım şekillerini almasını kastetmeye çalışmaktayım.

İlk olarak örneğimize hızlı bir şekilde yeni bir Windows Phone Application yaratarak başlayıp hiç bir değişiklik yapmadan açılan uygulamayı çalıştırarak başlıyoruz. :) Emülatörümüz açıldıktan sonra emülatörün sağ tarafına baktığımızda emülatör üzerinde bir takım değişiklikleri yapmamız için bulunan butonları görüyor olacağız.

Bu butonlar emülatörümüzü sağa ve sola çevirerek bir telefonun olası kullanım durumlarını test etmemizi sağlamakta. Bu nedenle bu yazımız boyuncu bu butonları oldukça fazla kullanıyor olacağız. Şimdi emülatörümüzü kapatmadan telefonun sol tarafa çevrilmiş haline baktığımızda uygulamamız nasıl bir davranış sergilemekte bunu aşağıdaki resimden inceleyelim.

Resme baktığımızda aslında uygulamadan beklediğimiz davranışı görememekteyiz. Normalde baktığımızda başlıkların da dönüp ekranın yeni durumuna göre tekrardan konumlanması gerekirdi. İsterseniz hemen XAML tarafına geçelim ve bu durum neden oluştu incelemeye çalışalım.

Aslında XAML tarafına geçtiğimizde herşey yukarıdaki resimde gördüğümüz attributelerde gizli. SupportedOrientations attribute’nde sayfamızın hangi tür yönleri desteklediğini belirtmekteyiz. Böylece sayfamız dikey mi yatay mı yoksa her iki şekilde kulanımı da destekleyecek mi konularında bildirimimizi bu attribute yardımıyla gerçekleştirebiliyoruz. Orientation attribute ile de sayfamızın ilk olarak hangi konumda olduğunu belirtebilmekteyiz. Bu tage göre sayfamız ilk açıldığında belirttiğimiz yöne doğru açılmaktadır.

Şimdi isterseniz SupportedOrientations attribute değerini PortraitorLandscape olarak değiştirelim ve yukarıda gerçekleştirdiğimiz senaryoyu baştan canlandıralım ve bakalım sonuç ne olacak ?

Evet şimdi uygulamamız istediğimiz şekilde bir davranış sergiledi. İşte bu şekilde uygulamamızdaki sayfa yönlerini dilediğimiz şekilde ayarlayabilmekteyiz. Peki cihazın yönü değiştirildiğinde haberimiz olabilir mi acaba ? Mesela bir resmi yada videoyu gösterdiğimizi düşünürsek telefon yatay konuma getirildiğinde ilgili medyayı nasıl tam ekran ekran yapabiliriz. Bunun için bize sayfanın yönünün değiştiğine dair bir event gerekli. Bu noktada da yardımıza OrientationChanged eventi yetişmekte. Böylece bu event her tetiklendiğinde sayfamızın yönünü kontrol edebilir ve duruma göre istediğimiz işlemleri gerçekleştirebiliriz.

Bir sonraki yazımızda görüşmek üzere,

Hoşçakalın,



Windows Phone 7 Uygulamalarında InputScope ile Girdi Tipine Uygun Klavye Gösterimi

Merhaba Arkadaşlar,

Günümüzde mobil cihazlara baktığımızda günlük işlemleri en hızlı şekilde gerçekleştirmemiz amacıyla tasarlandıklarını görmekteyiz. Bunun yanında mobil cihazlar içerisinde bulunan işletim sistemleri de donanımsal yeniliklerin yanında pek çok yazılımsal yeniliği de gerek kullanıcılara gerekse biz yazılım geliştiricilere ulaştırmakta. Bu yazımızda ise mobil cihaz üzerinden farklı formatlarda veri girerken sürekli olarak klavye türünü değiştirme sıkıntısından programatik olarak kullanıcıları nasıl koruyabiliriz sorusuna cevap arayacağız.

Geliştirdiğimiz uygulamalarda kullanıcılardan veri alma amaçlı sıkça kullandığımız kontrollerden biri de hiç şüphesiz Textbox kontrolü. Mobil uygulamalarda kullanıcı Textbox kontrolüne tıkladığında klavye görüntülenmekte ve kullanıcı açılan klavye vasıtasıyla verilerini girmekte. Ancak örneğin telefon numarası girileceği zaman klavye numara girme düzenine getirilip numaralar görüntülenen diğer klavye üzerinden girilmekte. Yada bir mail adresi girerken "@" işaretini yapmak için klavye yine numara düzenine getirilmekte buradan @ işareti girilerek sonra tekrar normal klavye üzerinden mail girişine devam edilmekte. Bu durum özellikle sürekli olduğu durumlarda oldukça can sıkıcı olabilmekte.

Default Windows Phone 7 Klavyesi

Numara Görünümü

Yukarıda sizin de gördüğünüz gibi klavyenin sürekli olarak değiştirilmesi oldukça can sıkıcı bir durum. Bu nedenle Windows Phone 7 içerisinde bulunan Textbox kontrollerinin ne tür veriler taşıyabileceğini önceden bildirerek telefonun Textbox'ın içerisine girilecek veri tipine uygun bir klavye çıkarmasını sağlayabilmekteyiz. Üstelik tüm bu işlemi sadece tek bir property üzerinden gerçekleştirmekteyiz. :) Textbox kontrolü içerisinde bulunan InputScope propertysi ile. InputScope propertysinin alabileceği değerler ise şunlar.

XAML tarafından ise ilgili propertynin değerinin atanması şu şekilde.

<TextBox x:Name="txtPhone" InputScope="TelephoneNumber" Margin="0,0,0,536" />

Gördüğümüz gibi arkadaşlar veri tipi seçeneklerimiz oldukça fazla. Böylece yukarıdaki veri tipi seçeneklerini kullanarak veri tipinin girişine uygun klavyeleri görüntüleyebilmekte ve böylece hızlı bir şekilde kullanıcılardan girdileri alabilmekteyiz. Aşağıda çeşitli veri tiplerine uygun olarak görüntülenen klavyeleri görebilirsiniz. Böylece kullanıcıların nasıl daha iyi bir deneyim elde edeceklerini daha iyi anlayabilirsiniz. :)

TelephoneNumber

URL

EmailNameOrAddress

Görüşmek Üzere,



Windows Phone 7 Uygulamalarında Launcher Yapısı

Merhaba Arkadaşlar,

Bu yazımızda Windows Phone 7 Uygulamalarında önemli bir yere sahip olan Launchers mekanizmasını inceliyor olacağız. Launchers kelimesinin Türkçe karşılığı olarak baktığımızda "Başlatıcılar" gibi bir sözcükle karşılaşmaktayız ki bu sözcük aslında mekanizmanın tam olarak ne işe yaradığı hakkında bize biraz bilgi vermekte. Windows Phone 7 cihazları üzerinde uygulama geliştirirken bir takım işlemleri yaptırmak için telefon üzerinde bulunan bir takım built-in uygulamaları çağırmamız gereken durumlar olabilmekte. Örneğin, uygulamamız içerisinde bir telefon numarası seçildiğinde o numaranın otomatik olarak aranmasını isteyebiliriz yada bir mail adresi seçildiği zaman kullanıcının cihaz üzerine kaydettiği mail hesabıyla bir mail gönderilmesinin sağlanması gerekebilir. İşte bu gibi durumlarda cihaz üzerinde bulunan ve bir takım işlemlerin yapılmasını sağlayan uygulamaların açılması gerekmektedir. Bu nokta da Launcher mekanizması devreye girmekte.

Şimdi kısaca Microsoft.Phone.Tasks isim uzayı içerisinden erişebildiğimiz launcherlara ve işlevlerine teker teker bakalım.

  • EmailComposeTask : Kullanıcının cihaz üzerinde kayıtlı bulunan e-mail hesabını kullanarak e-mail göndermemizi sağlayan launcher.
  • MarketplaceDetailTask : Windows Phone Marketplace vasıtasıyla kullanıcıya belirli bir uygulama ile ilgili bilgilerin gösterilmesini sağlayan launcher.
  • MarketplaceHubTask : Windows Phone 7 üzerinde Windows Phone Marketplace uygulamasını açmayı sağlayan launcher.
  • MarketplaceReviewTask : Windows Phone Marketplace üzerindeki belirli bir uygulama ile ilgili değerlendirmelerin bulunduğu ekranın açılmasını sağlayan launcher.
  • MarketplaceSearchTask : Windows Phone Marketplace üzerinde uygulama araması yapmak için kullanılan kısmın açılmasını sağlayan launcher.
  • MediaPlayerLauncher : Windows Phone üzerinde bulunan Media Player uygulamasını açan launcher.
  • PhoneCallTask : Windows Phone üzerinde telefon araması yapmak için gerekli olan uygulamanın açılmasını sağlayan launcher.
  • SearchTask : Gerek lokal gerekse web üzerinde arama yapabilmek için kullanılan launcher.
  • SmsComposeTask : SMS gönderimi için gerekli olan uygulamanın açılmasını sağlayan launcher.
  • WebBrowserTask : Windows Phone üzerinde bulunan Browser'ın açılmasını sağlayan launcher.
Windows Phone üzerinde bulunan launcherlara göz attıktan sonra şimdi gelin bir kaçını kullanalım ve launcherların çalışma yapılarını daha iyi anlayalım.
SmsComposeTask
Windows Phone üzerinden SMS gönderimi yapmak için kullandığımız SmsComposeTask tipini kullanmak için bir örneğini yaratıp ilgili alanları doldurduktan sonra Show metodunu çağırmamız yeterli.
SmsComposeTask SmsCompose = new SmsComposeTask();
SmsCompose.To = "22221112322";
SmsCompose.Body = "Bu bir WP7 deneme mesajıdır !";
SmsCompose.Show();

Yukarıdaki kodu uygulamamız içerisinde herhangi bir noktaya yerleştiğimizde ve çalıştığımızda uygulama içerisinden mesaj gönderme uygulaması açılmakta ve doldurduğumuz bilgiler ekran üzerinde ilgili yerlere yerleştirilmekte.

 

SMS uygulaması parametre olarak belirttiğimiz telefon numarası ve mesaj içeriğini alarak açılmakta

WebBrowserTask

Windows Phone üzerinde bir web sitesi görüntülemek için Browser uygulamasını açmamızı sağlayan bu launcherda ise açmak istediğimiz sayfanın URL'ini vermemiz yeterli.

WebBrowserTask task = new WebBrowserTask();
task.URL = "http://www.ilkayilknur.com";
task.Show();

Uygulamayı çalıştırdığımızda ise browser uygulaması bizim önceden vermiş olduğumuz URL'i açarak çalışmakta.

Parametre olarak verdiğimiz web sitesi Windows Phone 7 içerisindeki browser tarafından görüntülenmekte

PhoneCallTask

Örneğini yapacağımız son launcher ise PhoneCallTask launcherı. Bu launcher ile telefon numarasını ve ismini verdiğimiz bir kişiye telefon açabiliyoruz.

PhoneCallTask phoneCall = new PhoneCallTask();
phoneCall.PhoneNumber = "12332222222";
phoneCall.DisplayName = "İlkay İlknur";
phoneCall.Show();
Uygulamayı çalıştırdığımızda telefon öncelikle telefon numarası ve ismi bildirilen kişiyi aramayı isteyip istemediğimizi sormakta. Daha sonra aramayı kabul ettiğimiz durumda telefon arama işlemini gerçekleştirmekte.

Aramayı kabul ediyoruz

Numara çevrilmekte ve arama işlemi gerçekleşmekte

Windows Phone 7 uygulamaları için gerektiği durumlarda oldukça önemli olan Launcher yapısı bu yazımızın konusuydu. İleriki yazılarımızda Launcher'lara oldukça benzeyen ancak aralarında ufak bir fark olan Chooser mekanizmasını da inceliyor olacağız.

Bir sonraki yazımızda görüşmek üzere,

Hoşçakalın.

Not : Maalesef launcher mekanizmalarının hepsi emulator üzerinde çalışmamakta. Bu nedenle programın en doğru şekilde çalıştığını test etmek için mutlaka programı telefon üzerine kurmamız gerekmekte.



Windows Phone 7 Uygulamalarında Chooser Yapısı

Merhaba Arkadaşlar,

Bir önceki yazımızda Windows Phone 7 uygulamalarında önemli bir yere sahip olan launcher yapısını incelemiştik. Launcher'lar hatırlayacağımız üzere bir takım işlemleri gerçekleştirmek için işletim sistemi üzerinde bulunan built-in uygulamaları çalıştıran yapılardı. Ancak bu uygulamaları çalıştırarak kendi uygulamamız içerisine herhangi bir veri alamıyorduk. Sadece built-in uygulamayı çalıştırarak işlemi gerçekleştirebiliyorduk. İşte Chooser'lar ve Launcher'lar arasındaki en büyük farkta tam burada ortaya çıkmakta. Chooser'lar bir takım işlemleri gerçekleştirmek için yine built-in uygulama çalıştırmakta ancak işlem tamamlandığında Windows Phone 7 uygulamamıza bir veri döndürmekte. Bu veri kullandığımız Chooser'a göre kimi  zaman bir e-mail adresi olabileceği gibi kimi zaman da kamera tarafından çekilen  bir fotoğraf olabilmekte.

Windows Phone 7 uygulamalarımız içerisinde kullanabileceğimiz chooserlar da launcherların da aynı zamanda içerisinde bulunduğu Microsoft.Phone.Tasks isim uzayı içerisinde yer almakta. Şimdi kısaca bu isim uzayı içerisinde bulunan chooserları inceleyelim.

  • CameraCaptureTask : Windows Phone 7 uygulaması içerisinden telefon üzerinde bulunan kamera vasıtasıyla fotoğraf çekmeyi sağlayan Chooser.
  • EmailAddressChooserTask : Windows Phone 7 uygulaması içerisinde telefon içerisinde bulunan contact listesi içerisindeki kişilerin mail adreslerinin seçilmesini sağlayan chooser.
  • PhoneNumberChooserTast : Windows Phone 7 uygulaması içerisinde telefon içerisinde bulunan contact listesi içerisindeki kişilerin telefon numaralarının seçilmesini sağlayan chooser.
  • PhotoChooserTask : Windows Phone 7 uygulaması içerisinde telefon içerisinde bulunan fotoğrafları seçmeyi sağlayan chooser.
Şimdi isterseniz bahsettiğimiz Chooserların uygulamamız içerisinde nasıl kullanabileceğimizi inceleyelim.

CamereCaptureTask

Windows Phone 7 uygulamamız içerisine mobil cihaz üzerinde bulunan kamera tarafından çekilen fotoğrafı almak için kullandığımız CameraCaptureTask tipinin kullanımını görmek için öncelikle uygulamamız içerisinde bulunan sayfaya bir buton ve bir image kontrolü yerleştirelim ve ayrıca sayfa içerisinde bulunan başlıkları değiştirelim. Page kontrolü içerisinde bulunan LayoutRoot isimli kontrolden itibaren sayfa görüntüsünü XAML karşılığı ise şu şekilde.  
<Grid x:Name="LayoutRoot" Background="Transparent">        
<Grid.RowDefinitions>            
<RowDefinition Height="Auto"/>            
<RowDefinition Height="*"/>        
</Grid.RowDefinitions>

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">            
<TextBlock x:Name="ApplicationTitle" Text="CHOOSERS" 
Style="{StaticResource PhoneTextNormalStyle}"/>            
<TextBlock x:Name="PageTitle" Text="Camera" Margin="9,-7,0,0" 
 Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            
<Image Height="291" HorizontalAlignment="Left" Margin="6,6,0,0" 
 x:Name="camPhoto" Stretch="Fill" VerticalAlignment="Top" Width="444" /> 
<Button Content="Fotoğraf Çek" Height="72" Click="button1_Click" 
 HorizontalAlignment="Left" Margin="6,320,0,0" Name="button1" 
 VerticalAlignment="Top" Width="201" />        
</Grid>    
</Grid
Daha sonra ise kod tarafına geçerek button click handlerı içerisine geçerek CameraCaptureTask tipinden bir örnek yaratalım ve ilgili built-in uygulamayı çalıştırdıktan sonra çekilen fotoğrafı uygulamamız içerisinde bulunan Image kontrolü içerisinde gösterelim.
private void button1_Click(object sender, RoutedEventArgs e)
{
CameraCaptureTask camCapture = new CameraCaptureTask();
camCapture.Completed += (_sender, _args) =>    {
if (_args.TaskResult == TaskResult.OK)
{
BitmapImage image = new BitmapImage();
image.SetSource(_args.ChosenPhoto);
camPhoto.Source = image;
}
};
camCapture.Show();
}
Şimdi uygulamayı çalıştırarak "Fotoğraf Çek" butonuna tıklayalım ve CameraCaptureTask örneğimizin nasıl çalıştığını inceleyelim.  

Fotoğraf Çek butonuna basılınca açılan fotoğraf çekme uygulaması

Ekran görüntüsüne baktığınızda dikkatinizi çeken ilk noktalardan biri zannediyorum ki karşımıza çıkan siyah ekran. Çoğu kişi bu ekran açıldığında bilgisayarımız üzerinde bulunan kameranın açılmasını beklemekte. Ancak bunun yerine emulator üzerinde bulunan ekranda büyük bir dikdörtgen içerisinde dolaşan küçük bir dikdörtgen bulunmakta. Dolayısıyla emulator üzerinden çektiğimiz fotoğraflar da bu dikdörtgenler bulunmakta.

Telefon tarafından çekilen fotoğrafın uygulamamız içerisine aktarılması

Gördüğünüz gibi telefon tarafından uygulama tarafına gönderilen fotoğraf biraz önce bahsettiğimiz iç içe dikdörtgenler. Bunun dışında uygulama kodlarında da farkedebileceğiniz gibi fotoğraf çekme uygulaması içerisinde uygulamanın başarılı bir şekilde işlevini tamamlayıp tamamlamadığını da TaskResult enumı yardımıyla kontrol edebilmekteyiz.

PhotoChooserTask

Telefon içerisinde bulunan fotoğraflar arasından uygulamamız için fotoğraf seçmek için kullanılan PhotoChooserTask tipi üzerinden fotoğraf seçimi ile ilgili bir takım(Maksimum width,height) kriterler verebilmekteyiz. Bunun haricinde yine bu tipi üzerinde bulunan ShowCamera propertysini true olarak belirleyerek kullanıcının fotoğraf seçme işlemi içerisinde dilerse fotoğraf çekme işlemine geçmesini sağlayabilmekteyiz. Arayüzümüz aynı kalmak suretiyle buton click handlerını PhotoChooserTask'ı çalıştıracak şekilde değiştirelim ve uygulamayı çalıştıralım.

private void button1_Click(object sender, RoutedEventArgs e)
{
PhotoChooserTask photoChooser = new PhotoChooserTask();
photoChooser.ShowCamera = true;
photoChooser.Completed += (_sender, _args) =>
{
if (_args.TaskResult == TaskResult.OK)
{
BitmapImage image = new BitmapImage();
image.SetSource(_args.ChosenPhoto);
camPhoto.Source = image;
}
};
photoChooser.Show();
}

Adım adım fotoğraf seçme işlemi

EmailAddressChooserTask

Telefon üzerinde bulunan contact listesi içerisinden e-mail adresi seçmek için kullanılan EmailAddressChooserTask tipinin kullanımını incelemek için sahneye bir textblock ve bir buton koyalım.

<Grid x:Name="LayoutRoot" Background="Transparent">        
<Grid.RowDefinitions>            
<RowDefinition Height="Auto"/>            
<RowDefinition Height="*"/>        
</Grid.RowDefinitions>

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">            
<TextBlock x:Name="ApplicationTitle" Text="CHOOSERS" 
 Style="{StaticResource PhoneTextNormalStyle}"/>            
<TextBlock x:Name="PageTitle" Text="Email" Margin="9,-7,0,0"
 Style="{StaticResource PhoneTextTitle1Style}"/>        
</StackPanel>

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            
<Button Content="Email Adresi Getir" Height="72" 
 Click="button1_Click" HorizontalAlignment="Left" 
 Margin="6,63,0,0" 
 Name="button1" VerticalAlignment="Top" Width="268" />
 <TextBlock Height="30" HorizontalAlignment="Left"
  Margin="21,14,0,0" Name="tbEmailAddress" Text="" 
 VerticalAlignment="Top" />        
</Grid>   
</Grid>

Butona tıklandığında ise EmailAddressChooserTask tipinde bir örnek yaratarak çalıştıralım ve dönen sonucu uygulama içerisinde bulunan TextBlock içerisine yazdıralım.

 
private void button1_Click(object sender, RoutedEventArgs e)
{
EmailAddressChooserTask emailChooser = new EmailAddressChooserTask();
emailChooser.Completed += (_sender, _args) =>
{
if(_args.TaskResult == TaskResult.OK)
tbEmailAddress.Text = _args.Email;
};
emailChooser.Show();
}

Adım adım e-mail seçme işlemi

Gördüğümüz gibi burada da telefon içerisinde bulunan contact listesi açılmakta ve contact listesinden seçilen kişinin e-mail adresi uygulamaya döndürülmekte.  Diğer geri kalan PhoneNumberChooserTask sınıfı da yine bu şekilde çalışmaktadır.

Chooserların Ortak Çalışma Özellikleri

Yazımızın sonuna gelmeden önce sizinde yazıyı okurken farkedeceğiniz üzere Chooser'ların bir takım ortak çalışma özellikleri bulunmakta.

Bunlar,

  • Chooserlar üzerinden bir takım built-in uygulamalar çalıştırılırken ilgili veriyi elde etmek için Chooserların Completed eventi kullanılır.
  • Her chooserın çalışması sırasında işlemler başarılı olmayabilir. Örneğin kullanıcı fotoğraf seçme işlemine başlayıp ancak daha sonra bu kararından vazgeçebilir. Bu gibi durumlarda veri chooser üzerinden elde edilmeden önce TaskResult enumı kullanılarak Chooser işleminin durumu kontrol edilmelidir.
  • PhotoChooserTask diğer chooser mekanizmalarına göre bir takım ek propertyler içermekte. PixelWidth ve PixelHeight fotoğraf seçme işleminde birer kriter olarak yer alırken ShowCamera propertysi fotoğraf seçme işlemi içerisinden aynı anda fotoğraf çekme özelliğini aktif eder.
Bir Windows Phone 7 ile ilgili yazımızın sonuna geldik. Bir sonraki yazıda görüşmek üzere.
Hoşçakalın


Silverlight 4 RC, Expression Blend 4 Beta veee Windows Phone Üzerinde Silverlight Uygulama Geliştirme İmkanı

Merhaba Arkadaşlar,

Uzun süredir heyecanla beklediğim MIX'10 konferansı başladı. Birkaç hafta önceden twitterda MIX'te birçok yeniliğin açıklanacağını belirtmeye çalışmıştım(Ancak maalesef yeniliklerin içeriğini bildiğim halde paylaşma imkanım yoktu Smile). Neyse , az önce MIX'10 konferansında ilk gün keynote oturumu sona erdi ve beklediğim gibi son derece efsanevi hareketlere sahne oldu. İlk olarak duyurulan Silverlight 4 RC oldu. Silverlight ile artık Visual Studio 2010 RC ortamında geliştirme yapabilir durumdayız. Silverlight 4 RC ile beraber tasarım tarafında da Expression Blend 4 Beta duyuruldu ve indirilmeye sunuldu. İlgi çekici bir haber de Expression Blend 4 'e Expression Blend 3'ten yükseltmenin ücretsiz yapılacağıydı. Silverlight 4 RC sürümü ile beraber bir takım yeni özellikler de gelmiş durumda. Ayrıca bir takım değişiklikler de yapılmış durumda. Tüm bu yeniliklere Silverlight Program Manager Tim Heuer'in yazısından ulaşabilirsiniz.  Silverlight 4'ün final sürümüne ise gelecek ay muhtemelen Visual Studio 2010'un çıkış tarihinden sonra ulaşabileceğiz. Dikkat etmemiz gereken noktalardan biri de Silverlight 4 RC ile de go-live lisansının gelmemesi. Tüm yeniliklere aşağıdaki linkleri kullanarak ulaşabilirsiniz.

Silverlight 4 Tools for Visual Studio 2010 RC

Expression Blend 4 Beta

Silverlight Toolkit March 2010 Release 

MIX'10'da açıklanan en efsanevi hareket ise hiç şüphesiz Windows Phone üzerinde Silverlight ile uygulama geliştirme imkanı idi. Windows Phone üzerinde aynı klasik silverlight uygulaması geliştirir gibi aynı kod ve aynı toolları kullanarak uygulamalar geliştirebileceğiz. Visual Studio 2010 ve Expression Blend üzerinde designerlar yardımıyla uygulamayı tasarlayabilir ve yine bu uygulamalar içerisindeki emulatorü kullanarak uygulamayı çalıştırabiliriz. Aynı zamanda uygulamayı elimizdeki Windows Phone'a bağlayarak ta anında çalıştırabilir durumda olacağız. Windows Phone tarafında uygulama geliştirme araçları şuan CTP sürümünde ve biz uygulama geliştiricilerin kullanımına sunulmuş durumda. Windows Phone üzerinde uygulama geliştirme için gereken toollara aşağıdan ulaşabilirsiniz.

Windows Phone Developer Tools CTP

Expression Blend 4 Add-on for Windows Phone Development

Expression Blend 4 Windows Phone SDK

Ne diyelim herkese iyi eğlenceler ve uykusuz geceler Smile