İlkay İlknur

Just a developer

Silverlight’ta Textbox’a Focuslanma Sorunu ve Çözümü

Merhaba ArkadaÅŸlar,

Kullanıcılardan veri girişi aldığımız ekranlarda kullanıcının herhangi bir seçim yapmadan doğrudan klavye kullanarak veri girişine başlaması için ilgili bir kontrole programatik olarak focus olmayı sağlamaktayız. Böylece kullanıcı sayfa üzerinde focuslanan kontrolden itibaren veri girişine başlamakta, klavyeyi kullanarak diğer girdi kontrollerine erişebilmekte ve veri giriş işlemini kısa sürede gerçekleştirebilmekte. Aynı senaryo Silverlight uygulamaları için de geçerli.

O zaman Silverlight tarafından ilk olarak sahneye 2 TextBox kontrolü ekleyelim ve daha sonra 2. textbox’a focuslanmayı saÄŸlayalım.

<StackPanel>    
<TextBox Width="208" x:Name="txtOne" Margin="0,10,0,0" />    
<TextBox Width="208" x:Name="txtTwo" Margin="0,10,0,0"/>
</StackPanel>

Uygulama kodumuz.

public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
txtTwo.Focus();
}

Uygulamayı çalıştırdığımızda ise aslında beklemediğimiz bir sonuç ile  karşılaşmaktayız.

Ancak browser içerisinde herhangi bir noktaya tıklarsak focus’un doÄŸrudan ikinci textboxa geçtiÄŸini görmekteyiz. Aslında bu da bizim istediÄŸimiz davranış. Peki ama neden ekrana tıklamamız gerekti ?

Bunun nedeni sayfa yüklendiÄŸinde focus’un Silverlight uygulamasını içerisinde barındıran elementte bulunmaması. Bu nedenle biz ekrana tıklayarak plugin’in içerisinde bulunduÄŸu kontrole focuslanmayı saÄŸlamaktayız ve bu iÅŸlem sonucunda bizim istediÄŸimiz textboxa focuslanma saÄŸlanabilmekte. Peki bu problemi nasıl çözebiliriz ?

Bu problemin çözümü için 2 yöntem bulunmakta. Birincisi javascript ile ilgili elemente focuslanmayı sağlamak. İkincisi ise javascript ile yaptığımız işlemi Silverlight tarafında sunulan imkanlar ile gerçekleştirmek.

1.Yöntem

Aşağıda bulunan javascript kodunu uygulamamıza ekleyerek Silverlight pluginine focuslanmayı sağlayabiliriz.

 var SlElement = document.getElementById('silverlightControlHost');
if (SlElement)
SlElement.focus();

2. Yöntem

Silverlight’ın bizim browsera ve HTML DOM’a eriÅŸmeyi saÄŸlayan ve bir takım iÅŸlemleri gerçekleÅŸtirmemizi saÄŸlayan System.Windows.Browser namespace’i içerisinde bulunan HtmlPage isimli tipin üzerinden sayfada bulunan plugin’e aÅŸağıdaki gibi focuslanabiliriz.

System.Windows.Browser.HtmlPage.Plugin.Focus();

Uygulamamızın tam kodu ise şu şekilde

public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Browser.HtmlPage.Plugin.Focus();
txtTwo.Focus();
}

Uygulamayı çalıştırırsak

Böylece sizlerde focus metodunu kullandığınızda eğer istediğiniz kontrole focusu sağlayamazsanız yukarıdaki yöntemlerden biri ile sorunu çözebilirsiniz.

Görüşmek Üzere,

No Responses to “Silverlight’ta Textbox’a Focuslanma Sorunu ve Çözümü”

RSS feed for comments on this post. TrackBack URL

Leave a Response