This article has been localized into Turkish by the community.
Tab Sıralaması
Eğer yazılım öğrenmek için bilgisayarda yeterince uzun çalıştıysanız Tab tuşunu kullanarak pencere/diyalog içinde gezinmenin mümkün olduğunu bilirsiniz. Bu bir form doldurma ya da benzeri iş yaparken elinizi tuş takımından ayırıp mouse kullanmadan diğer soruyu cevaplamanıza imkan tanır.
WPF içinde de bu özeelik var, hatta daha iyisi : otomatik olarak bir kontrolden diğerine geçiş sıralamasını düzenliyor. yani genelde bir şey yapmanız gerekmiyor. Bununla beraber çeşitli nedenlerle pencere ya da diyaloğunuzda WPF'nin yaptığı sıralamaya uymak istemeyebilirsiniz. Ayrıca bazı kontrollere bu Tab tuşu gezinmesinde uğranmasını istemeyebilirsiniz. Bunu bir örnekle açıklayayım :
Diyalog yerleşimi bir Grid ile yapılmış, iki yanında Label ve TextBox'lar içeren StackPanel'ler var. Tab geçişleri default olarak penceredeki ilk kontrolden başlar ve sırayla sonrakine geçer. Diyalog yerleşimi StackPanel'ler ile dikey olarak hizalandığı için First name alanından başlayacak ve sonra Street name alanına geçecektir, sonra da City alanına, anca bundan sonra Last name ve Zip code alanlarının olduğu ikinci StackPanel'e geçilecektir. İkinci StackPanel de bittikten sonra Tab sıralamasında son olarak butonlara gelinecektir.
Fakat bu diyalogda benim istediğim davranış bu değil. Ben First name alanından dikey yerine yatay hareket ederek Last name alanına geçmek isterim, ve her şeyden öncesi City alanına girmesini istemem, çünkü bu alan Zip code bilgisi girilince otomatik doldurulacak ve bu yüzden sadece okunabilir bir alan. Tüm bunları gerçekleştirmek için TabIndex ve IsTabStop özelliklerini kullanacağım. TabIndex sırayı belirlemek için kullanılır, IsTabStop özelliği WPF'in pencerede Tab ile gezinirken bu kontrolü atlaması için kullanılır. İşte bu diyalog için yapılanma :
<Window x:Class="WpfTutorialSamples.Control_concepts.TabOrderSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTutorialSamples.Control_concepts"
mc:Ignorable="d"
Title="TabOrderSample" Height="250" Width="400">
<Grid Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel>
<Label>First name:</Label>
<TextBox TabIndex="0" />
<Label>Street name:</Label>
<TextBox TabIndex="2" />
<Label>City:</Label>
<TextBox TabIndex="5" IsReadOnly="True" IsTabStop="False" Background="Gainsboro" />
</StackPanel>
<StackPanel Grid.Column="2">
<Label>Last name:</Label>
<TextBox TabIndex="1" />
<Label>Zip Code:</Label>
<TextBox TabIndex="4" />
</StackPanel>
<Button Grid.Row="1" HorizontalAlignment="Right" Width="80">Add</Button>
<Button Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Width="80">Cancel</Button>
</Grid>
</Window>
TabIndex özelliğine bir sayı verdim ve City için kullanılan TextBox IsTabStop özelliğini kullandım - Bir diyalogda tab sıralamasını kontrol etmek bu kadar basit!
Sonuç
Bir diyalogda tab sıralamasını kontrol etmek önemli , ama WPF otomatik olarak oldukça iyi bir tanımlamayı bizim için yapıyor. Ancak bazı durumlarda TabIndex ve IsTabStop özelliklerini kullanarak kontrolü yukarıdaki gibi elimize almamız gerekebilir.