Windows Phone 8 ve Azure Mobil Servisler

Oldukça uzun zamandır (yaklaşık 4 ay 🙂 ) işe başlamış olmam ve okulumun hala devam ediyor olmasından dolayı yazamıyorum. Umuyorum bundan sonra daha çok yazma fırsatı bulabilirim. Bu yazımda aslında MSP olduğum dönemde hazırlamış olduğum Windows Phone 8 ve Azure Mobil Servisleri anlatan video kaydını paylaşacağım. Öncelikle diğer arkadaşlarında hazırlamış olduğu videoları birleştirip Youtube’a yükleyen eski MSP Lead’im ve şu anda ki iş arkadaşım Fatih Bekdemir’e teşekkür ederim. Benim hazırlamış olduğum bölüm uzun bir serinin 24. bölümüdür, tüm playlist’e

http://www.youtube.com/watch?v=CXNhanNPmA8&list=PL9ReGaZDkswEswygAyOTeU1r-DWsTDzO-&index=24

linkinden erişebilirsiniz. Bir sonraki yazımda görüşmek üzere…

Reklamlar

Windows Phone ScrollViewer bug

Bir kaç gün önce üzerinde çalıştığım projede DataTemplate içerisindeki kontrollere drag and drop eklemekle uğraşırken beni oldukça uğraştıran bir problem ortaya çıktı. Drag&Drop özelliği eklediğim kontrolleri item’ın grid’ine ait hold eventiyle tuttuktan sonra ManipulationDelta event’inde sürükleme işlemini gerçekleştirirken listbox’a ait ScrollViewer’ı disabled etmiş olmama rağmen kontrol scroll yapmaktaydı. Daha sonradan farkına vardığım bir şey ise, ScrollViewer.VerticalScrollBarVisibility özelliğini ScrollBarVisibility.Disabled olarak atanmış olmasına rağmen listbox üzerinde hold eventi gerçekleştikten sonra bu Scroll’un çalışıyor olması oldu.  Bu arada DataTemplate içerisindeki bir kontrolün listbox’ın dışarısına nasıl sürükleneceği ile ilgili başka bir yazı daha sonra ekleyeceğim.

öncelikle ister Xaml’da listbox’ın ScrollViewer.VerticalScrollBarVisibility‘sini false yapın veya kod tarafında listbox’ın SetValue metodunu SetValue(ScrollViewer.VerticalScrollBarVisibility,ScrollBarVisibility.Disabled) sonuç değişmemekte ve hold eventi çalıştıktan sonra listbox scroll edilebilmekte. Bunun için ben aşağıdaki gibi bir extension method oluşturdum ve scroll’un manipulation modu’nu sistem düzeyinde yapmaktansa kontrol düzeyinde yapmasını sağladım. Ancak scrollun düzgün bir şekilde çalışması için ManipulationMode’un daha sonradan tekrar sisteme verilmesi daha iyi olacaktır.

public static void SetListBoxScrollStatus(ListBox lb, ScrollBarVisibility horizontalVisibility, ScrollBarVisibility verticalVisibility)
{
    //listbox'a ait scrollviewer alınıyor
    ScrollViewer myScrollviewer = VisualTreeHelper.GetChild(lb, 0) as ScrollViewer;

    myScrollviewer.HorizontalScrollBarVisibility = horizontalVisibility;
    myScrollviewer.VerticalScrollBarVisibility = verticalVisibility;

    if ((horizontalVisibility | verticalVisibility) == ScrollBarVisibility.Disabled)
        //scrollviewer'lardan herhangi bir tanesi disabled ise
        myScrollviewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.Control);
    else
        //scrollviewerlar enabled ise
        myScrollviewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.System);
}

Şimdilik çözüm yolu bu kadardır. Umuyorum kısa bir süre sonra listbox itemlarına nasıl drag&drop özelliği ekleyebileceğinizle ilgili bir başka yazı yazacağım.