KodFeed İLMİN ZEKATI…

15Kas/110

Silverlight’da FullScreen

Silverlight IconSilverlight uygulamanızı fullscreen olarak kullanmak oldukça basit. Fullscreen yapmak silverlight'da oldukça basit olmasıyla birlikte fullscreen yaptığınızda bir sorun ile karşılaşabilirsiniz. Uygulamanıza bir textbox koyup, fullscreen yaptığınızda textbox'a yazamadığınızı göreceksiniz. Silverlight'da fullscreen çalıştırıldığında, belirli tuşlar haricinde tuşların kullanılması güvenlik sebebiyle engellemiş durumda.  İzin verdiği tuşlar ise şunlar;

  • UP ARROW
  • DOWN ARROW
  • LEFT ARROW
  • RIGHT ARROW
  • SPACEBAR
  • TAB
  • PAGE UP
  • PAGE DOWN
  • HOME
  • END
  • ENTER

     

Aşağıdaki kod parçacığı, uygulamanızı fullscreen çalışmasını sağlamaktadır. Buton click eventine bunu eklediğiniz taktirde, butona tıkladığınızda uygulamanız fullscreen olacaktır.

Application.Host.Content.IsFullScreen = true;

Yine aynı şekilde butona tıklanıldığında fullscreenden çıkmak istiyorsanız;

Application.Host.Content.IsFullScreen = false;

demeniz yeterli olacaktır. Yapacağınız uygulamada butona tıkladığınızda tam ekran tekrar aynı butona tıklanıldığında normal görünüme geçmesini istiyorsanız;

Application.Host.Content.IsFullScreen = !Application.Host.Content.IsFullScreen;

işinizi görecektir. Bu kod parçacığı, uygulamanız normal görünümdeyken tıklanıldığında, ekranı kaplayacak ve aynı şekilde tam ekran çalışırken de tıklanıldığında normal haline geri dönüş yapacaktır. Tabi fullscreen yaptığınız'da göreceğiniz üzere ESC tuşuna bastığınızda da normal görünüme geçecektir.

VN:F [1.9.14_1148]
Rating: 9.0/10 (1 vote cast)
VN:F [1.9.14_1148]
Rating: +2 (from 2 votes)
Etiketler: Yorum yok
11Kas/110

Silverlight ve Dışardan Değişken Alma

Silverlighta dışarıdan değişken okumanın bir kaç yolu bulunmakta. Bunlardan en yaygın olanı silverlight objesinde initparam attributune değer verilerek yapılmakta. Yine aynı şekilde initparam içindeki verileri webconfig dosyasından okuyarak da set edebiliriz. Benim önereceğim yöntem ise WCF Ria Service üzerinden alınması olacak. WCF Ria Service üzerinden alınması eğer uygulamanızı Out of browser olarak kullanmayı hedefliyorsanız sizin avantajınıza olacak çünkü diğer initparam ile değişken alma imkanınız olmayacak. Şimdi bu yöntemleri sırasıyla nasıl yapıldığına bakalım.

InitParams Kullanımı

Silverlight nesnesini çağırdığınız web sayfasında (örneğin Default.aspx) silverlight objesinde initparam kullanarak aşağıdaki şekilde değişkene değer verebiliriz.

Sonuç olarak sayfanızın silverlight objesi aşağıdaki gibi olacaktır.

</pre>
<object width="400" height="200" classid="clsid:dfeaf541-f3e1-4c24-acac-99c30715084a"><param name="source" value="InitParamsTest.xap" /><param name="minRuntimeVersion" value="4.0.50826.0" /><param name="autoUpgrade" value="true" /><param name="initParams" value="param1=param1degeri,param2=param2degeri" /><param name="src" value="data:application/x-silverlight," /><param name="minruntimeversion" value="4.0.50826.0" /><param name="autoupgrade" value="true" /><param name="initparams" value="param1=param1degeri,param2=param2degeri" /><embed width="400" height="200" type="application/x-silverlight-2" src="data:application/x-silverlight," source="InitParamsTest.xap" minRuntimeVersion="4.0.50826.0" autoUpgrade="true" initParams="param1=param1degeri,param2=param2degeri" minruntimeversion="4.0.50826.0" autoupgrade="true" initparams="param1=param1degeri,param2=param2degeri" /> <a href="http://go.microsoft.com/fwlink/?LinkID=124807"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" /> </a></object>
<pre>

Bu şekilde yapmış olduğunuz bir sayfada değişkenleri okumak için silverlight tarafında App.xaml dosyasının codebehind tarafında Application Startup'ta verileri alabilirsiniz.

internal static string param1;
internal static string param2;

private void Application_Startup(object sender, StartupEventArgs e)
{
    param1 = e.InitParams["param1"];
    param2= e.InitParams["param2"];
    this.RootVisual = new MainPage();
}

Sonuç olarak App.xmal içerisinde initParams'da bulunan değişkenleri okuyup silverlighta bir değişkene atamış olduk.

InitParams Değişkenlerini WebConfig Dosyasından Alma

Webconfig dosyasından bilgileri alıp initparams ile değişkenleri silverlighta aktarabiliriz. Fakat burada unutulmaması gereken konu out of browser'da initparams ile veri alınamamaktadır.


 

</pre>
<object width="400" height="200" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="source" value="InitParamsTest.xap" /><param name="minRuntimeVersion" value="4.0.50826.0" /><param name="autoUpgrade" value="true" /><param name="InitParams" value="param1= <% =ConfigurationManager.AppSettings[&quot;myWCFServiceUrl&quot;].ToString()%>" /><param name="src" value="data:application/x-silverlight," /><param name="minruntimeversion" value="4.0.50826.0" /><param name="autoupgrade" value="true" /><embed width="400" height="200" type="application/x-shockwave-flash" src="data:application/x-silverlight," source="InitParamsTest.xap" minRuntimeVersion="4.0.50826.0" autoUpgrade="true" InitParams="param1= <% =ConfigurationManager.AppSettings[&quot;myWCFServiceUrl&quot;].ToString()%>" minruntimeversion="4.0.50826.0" autoupgrade="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" /> </a></object>
<pre>

Burada dikkatinizi çekeceği üzere ConfigurationManager ile ApplicationSettings'te param1 keyinin değerini alıyoruz ve initparamsda param1'e aktarıyoruz. Önceki yöntemde olduğu gibi aynı şekilde silverlight uygulamasında verileri alabiliyoruz.

private void Application_Startup(object sender, StartupEventArgs e)
{
    string param1 = e.InitParams["param1"];
    this.RootVisual = new MainPage();
}

OOB ve InitParams

Silverlight OOB olarak kullanılmasını da istiyor ve InitParams ile veri alıyorsanız, silverlight oob olarak çalıştırdıktan sonra bu verileri InitParams'dan alamazsınız. Fakat bunun da çözümü bulunmakta. IsolatedStorage kullanılarak değişkenlerinizi bir dosyaya kaydedebilir ve OOB kullanıldığı zaman IsolatedStorage içindeki dosyayı okuyabilirsiniz.

private void Application_Startup(object sender, StartupEventArgs e)
{
    var mp = new MainPage();
    this.RootVisual = mp;

    IDictionary initParams = LoadInitParams(e);

    //initParams değişkeninde bulunan bütün verileri foreach ile teker teker okuyoruz.
    //Ve textblock oluşturarak, verileri sayfada gösteriyoruz.
    foreach (var kv in initParams)
    {
        mp.LayoutRoot.Children.Add(new TextBlock { Text = kv.Key, FontStyle = FontStyles.Italic });
        mp.LayoutRoot.Children.Add(new TextBlock { Text = kv.Value, Margin = new Thickness(5,0,0,0) });
    }
}
private static IDictionary LoadInitParams(StartupEventArgs e)
{
    IDictionary initParams;

    //Eğer Out Of Browser olarak çalışıyorsa uygulamamız, initParams.txt dosyasını açıp değişkenleri okuyoruz.
    if (Application.Current.IsRunningOutOfBrowser)
    {
        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("initParams.txt", System.IO.FileMode.Open, isf))
        {
            DataContractSerializer ser = new DataContractSerializer(typeof(Dictionary));
            initParams = (Dictionary)ser.ReadObject(stream);
        }
    }
    // Out Of Browser olarak çalışmıyorsa uygulamamız. initParams.txt dosyasını oluşturup değişkenleri kaydediyoruz.
    // Böylece OOB çalıştırıldığında dosyamız oluşturulmuş ve değişkenler dosyamızdan okunmuş olunacak
    else
    {
        initParams = e.InitParams;

        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("initParams.txt", System.IO.FileMode.Create, isf))
        {
            DataContractSerializer ser = new DataContractSerializer(typeof(Dictionary));
            ser.WriteObject(stream, initParams);
        }
    }
    return initParams;
}

WCF Enabled Service ve Değişken okuma

Wcf Enabled Service'te de yine webconfig dosyasından değişkenleri okuyacağım. Bunun için webconfig dosyam aşağıdaki gibi olacaktır.


Silverlight uygulamamızdan WCF'den bilgileri alacağımızdan dolayı Invoke edeceğimiz fonksiyonumuzu yazıyoruz.

[OperationContract]
public string GetParam1()
{
    return ConfigurationManager.AppSettings["param1"].ToString();
}

WCF Enabled Service, Silverlight uygulamamıza service referans olarak ekledikten sonra artık parametrelerin alınması işlemi kalıyor.

private void Application_Startup(object sender, StartupEventArgs e)
{
    Service1Client proxy = new Service1Client();
    proxy.GetParam1Completed += new EventHandler proxy_GetParam1Completed);
    proxy.GetParam1Async();
}
public void proxy_GetParam1Completed(object sender, GetParam1CompletedEventArgs e)
{
    string param1value = e.Result;
}

Kaynaklar
http://www.dotnetfunda.com/articles/article957-how-to-pass-values-to-silverlight-application-from-aspx-page-using-initpara-.aspx
http://thejoyofcode.com/Silverlight_out_of_browser_and_initParams.aspx
http://pmtechlog.blogspot.com/2010/12/initparams-in-silverlight.html

VN:F [1.9.14_1148]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.14_1148]
Rating: +1 (from 1 vote)
23Tem/110

Silverlight ve Splash Screen

Silverlight'da bilindiği gibi zaten bir loading ekranı bulunmakta. Bu loading ekranının görüntüsü bilindiği gibi aşağıdaki gibidir;

Bu yazımızda Silverlight uygulamamızın loading yani splash screen ekranını özelleştireceğiz. Yapacağımız ekran oldukça basit bir uygulama olacaktır ama genel olarak nasıl çalıştığını anlamaya yeterlidir. Bundan sonraki aşamada ise splash screende yapacağınız uçuk kaçık şeyler sizin hayalinize kalmıştır :)

1) Öncelikle splash screen için boş bir xaml dosyasını web projesinde oluşturunuz. Burası çok önemli, oluşturacağınız boş xaml dosyası silverlight projesine eklemeyeceksiniz. Ben ClientBin\splashscreen.xaml dosyasını oluşturdum. siz farklı bir isim de verebilirsiniz.

2) Oluşturduğumuz boş xaml dosyasında ben sadece ekranda Yükleniyor... %xx tamamlandı şeklinde bilgi göstereceğim. Bunun için bana bir tane textblock yeterli olacaktır.

<TextBlock Width="272" Height="62" Foreground="#FFACACAC" Text="" TextWrapping="Wrap" x:Name="txtLoading" FontSize="50"/>

3) Sıra geldi başta splash screen aktif etmeye. Bunun için web projesinde, silverlight nesnesini çağırdığımız yere yeni parametreler eklememiz gerekmekte.

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2">
    <param name="source" value="ClientBin/CustomSplashEkran.xap"/>
    <param name="SplashScreenSource" value="ClientBin/splashscreen.xaml" />
    <param name="onSourceDownloadProgressChanged" value="DownloadProgress" />
</object>

source zaten önceki kodlarınızda mevcuttur. Burada yeni eklemeniz gereken son iki satır yani SplashScreenSource (splash ekran için oluştruğumuz xaml dosyasının yeri), diğeri ise onSourceDownloadProgressChanged (silverlight uygulamamızın yüklenme oranını javascript ile splash ekranda gösterilmesi). Bu javascript şu şekilde;

<script type="text/javascript">
function DownloadProgress(sender, eventArgs) {
    sender.findName("txtLoading").Text = "Yükleniyor... Tamamlanan % " + Math.round(eventArgs.progress * 100);
}
</script>

Artık yeni loading ekranınız hazır, projenizi çalıştırmanız yeterli :)

VN:F [1.9.14_1148]
Rating: 9.0/10 (1 vote cast)
VN:F [1.9.14_1148]
Rating: +1 (from 1 vote)
Etiketler: Yorum yok
Araç Takip | Araç Takip| Araç Takip