12 Temmuz 2011 Salı

WP7 uygulamalarında Back tuşu nasıl iptal edilir?

WP7 işletim sistemi içeren telefonların standart donanımlarında bildiğiniz üzere 3 adet tuş var. Solda bir önceki ekrana dönülmesini sağlayan Back tuşu, ortada ana sayfaya dönülmeyi sağlayan Home tuşu ve en sağda Bing'de arama yapmamızı sağlayan Search tuşu.
























Bu soldaki Back tuşu bazen uygulama geliştiricilerin canını sıkabiliyor. Uygulama içerisinde bir akışınız varsa ve bir önceki sayfaya geri dönülmesini istemiyorsanız bu Back tuşunun basılma event'ini yakalayıp, geri dönüşü engellemeniz mümkün.

Yapılması da çok basit alında. Projemizin xaml tarafında en dıştaki katman olan PhoneApplicationPage kontrolünün Event'lerine baktığımızda BackKeyPress event'ini görüyoruz ve çift tıklayarak bu eventi code behind tarafında yaratıyoruz.



















Yaratılma sonrasında Xaml kodu:
<phone:PhoneApplicationPage
x:Class="WindowsPhoneApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True" BackKeyPress="PhoneApplicationPage_BackKeyPress">

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="Onur'un Yeri"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="Back Testi" Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>
</Grid>

</phone:PhoneApplicationPage>
Code behind tarafında ise, yeni yaratılan metot içerisinde Back tuşuna basıldığında ne yapılmasını istiyorsak onu yazıyoruz. Bu örnekte işlemin iptal edilmesini istediğimiz için e.Cancel = true işimizi görecektir.
using System.Windows;
using Microsoft.Phone.Controls;

namespace WindowsPhoneApplication1
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}

private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBox.Show("Back tuşuna basamazsın kardeşim!");

e.Cancel = true;
}
}
}
Örnekte Back tuşuna basıldıktan sonra uygulamanın tepkisini görelim:
























İşte bu kadar basit bir şekilde Back tuşunun uygulamamız içerisinde fonksiyonalitesini değiştirmiş olduk. Duruma göre iptal işlemi değil de başka bir fonksiyon işletilmesi gerekirse de yine aynı event üzerinden istediğiniz akışı işletebilirsiniz.

Kolay gelsin,

Hiç yorum yok: