Merhaba arkadaşlar,
Sizlere silverlight ile adım adım navigasyon bar yapımını
anlatacağım. Kullanacağımız araçlar; VS2008, Expression Blend 2.5 .
1- VS2008 de boş bir web sitesi projesi açalım ve adını TutorialNavbar
koyalım.
2- Projeye Add New Item diyerek , Silverlight Application u
seçelim ve TutorialNavbarXap.csproj ismini verelim.
3-Aşağıdaki ekrandan Create a new Silverlight Project and add it to the
solution seçeneğini seçelim ve Add diyelim.
4- VS2008 Tarafından otomatik oluşturulan TutorialNavbarTestPage.aspx
sayfasını silelim.
5- TutorialNavbarXap projesini Expression Blend 2.5 ile açalım.
6- Ben aşağıdaki şekilde bir navigator hazırladım. Sizde Expression Blend ile buna benzer tasarımlar yapabilirsiniz.
7- Ana sayfaya canvas ekleyelim ve
adını ContentCanvas yapalım.
8- Bir tane dikdörtgen çizelim ve bunu nav1
in üzerine yani tıklanacak olan alana yerleştirelim. Aynı işlemi nsv2 ve 3
içinde yapalım. Bunların isimlerine Nav1ClickArea, Nav2ClickArea, Nav3ClickArea
diyelim ve bu dikdörtgenlerin opacity değerlerini 0 yapalım. Bunu yapmamızın
amacı Mouse tıklandığı zaman hangisine tıklandığını anlamak içindir.
9- Birkaç place holder sayfası oluşturalım.
Butonlara tıkladıkça bunlara yönlendirme yapacağız. İsimlerini sırasıyla
Nav1Page.xaml, Nav2Page.xaml, Nav3Page.xaml yapalım. Nav1Page.xaml de iken
“Nav1 Alanı” şeklinde bir text block ekleyelim. Aynı işlemi diğerleri içinde
yapalım.
10- Nav1ClickArea seçelim ve özelliklerine
gidelim. Buradan evenets butona tıklayıp olaylarını görelim.
MouseLeftButtonDown olayına ismi OnNav1Click olan bir olay atayalım.
11- Bu olaya tıklarsanız veya entera
basarsanız otomatik olarak page.xaml.cs
sayfasında boş bir metod oluşacaktır. Aynı işlemleri Nav2ClickArea ve
Nav3ClickArea içinde yapalım.
private void OnNav1Click(object sender, MouseButtonEventArgs e)
{
}
12-
page.xaml.cs sayfasmızdaki
kodumuzu aşağıdaki şekle getirin.
public partial class Page : UserControl
{
Nav1Page m_nav1Page = new Nav1Page();
Nav2Page m_nav2Page = new Nav2Page();
Nav3Page m_nav3Page = new Nav3Page();
public Page()
{
InitializeComponent();
Loaded += new RoutedEventHandler(PageLoaded);
}
void PageLoaded(object sender, RoutedEventArgs e)
{
RemoveAll();
ContentCanvas.Children.Add(m_nav1Page);
}
void RemoveAll()
{
ContentCanvas.Children.Remove(m_nav1Page);
ContentCanvas.Children.Remove(m_nav2Page);
ContentCanvas.Children.Remove(m_nav3Page);
}
private void OnNav1Click(object sender, MouseButtonEventArgs e)
{
RemoveAll();
ContentCanvas.Children.Add(m_nav1Page);
}
private void OnNav2Click(object sender, MouseButtonEventArgs e)
{
RemoveAll();
ContentCanvas.Children.Add(m_nav2Page);
}
private void OnNav3Click(object sender, MouseButtonEventArgs e)
{
RemoveAll();
ContentCanvas.Children.Add(m_nav3Page);
}
}
13- Projeyi derleyin.
14- Şimdi highlights yani üzerine geldiğiniz
belirginleştirme işlemi yapacağız. MouseEnter olayına OnNav1Enter isminde bir
olay atayın.diğerleri içinde aynı işlemi tekrar edin.
15- HighlightNone isminde bir metod
oluşturun. Bu tüm highlight ları boşaltmaya yarayacak. Bunu PageLoaded olayında
çağıracağız. OnNavEnter olayının başındada yine bu HighlightNone metodunu
çağırmamız gerekiyor.
void PageLoaded(object sender, RoutedEventArgs e)
{
RemoveAll();
ContentCanvas.Children.Add(m_nav1Page);
HighlightNone();
Nav1Highlight.Opacity = 100.0;
}
private void HighlightNone()
{
Nav1Highlight.Opacity = 0.0;
Nav2Highlight.Opacity = 0.0;
Nav3Highlight.Opacity = 0.0;
}
private void OnNav1Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav1Highlight.Opacity = 100.0;
}
private void OnNav2Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav2Highlight.Opacity = 100.0;
}
private void OnNav3Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav3Highlight.Opacity = 100.0;
}
16- Derleyin ve çalıştırın. Aşağıdaki gibi bir ekran göreceksiniz.
17- NavIndicator üçgeni için biraz animasyon
yapalım. Create storyboard Resource penceresini açalım. Ve MoveToNav2 ismini
verelim.
18- Key frame yapmadan NavIndicator
üçgeni nav2 nin altındayken
zamanı 1. saniyeye taşıyalım.
19- NavIndicator de iken key frame marker ı tıklayalım. Değerleri x1=0
and x2=.5 şeklinde verelim.
20- XAML görünümüne geçtiğinizde 2 tane
DoubleAnimationUsingKeyFrames alanını göreceksiniz. Biz NavIndicator un yatay
hareket etmesini istediğimiz için 2. DoubleAnimationUsingKeyFrames alanını
silmemiz gerekiyor.
21- storyboard ın ismini MoveToNav1 şeklinde
değiştirelim.: <Storyboard x:Name="MoveToNav1">
SplineDoubleKeyFrame in value değerini 0
yapalım.: <SplineDoubleKeyFrame KeyTime="00:00:01"
Value="0">
22- naventer olaylarına şu kodları ekleyelim
private void OnNav1Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav1Highlight.Opacity = 100.0;
MoveToNav1.Begin();
}
private void OnNav2Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav2Highlight.Opacity = 100.0;
MoveToNav2.Begin();
}
private void OnNav3Enter(object sender, MouseEventArgs e)
{
HighlightNone();
Nav3Highlight.Opacity = 100.0;
MoveToNav3.Begin();
}
23- fark ettiyseniz geçişler biraz yavaş
oldu.Xaml e gidip zamanı .5 ten 1 e çekelim.
<Storyboard x:Name="MoveToNav1">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00">
<SplineDoubleKeyFrame KeyTime="00:00:00.50" Value="0">
24- Şimdi daha iyi oldu. İşlem tamamlanmıştır.
Kaynak: Mike Dobbles
Mustafa KOÇER
mkocer@dotnetkosesi.com
2 kişi tarafından 5.0 olarak değerlendirildi
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5