İ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,



Yorum Gönder