Когато имате, да кажем, TextBox
и Button
като по-долу, всичко е наред. Можете да използвате tab stop, за да се движите напред и назад между двата контрола.
<StackPanel>
<TextBox>Type Here</TextBox>
<Button>Click Me</Button>
</StackPanel>
Но ако предефинирате TextBox
оформлението, не можете да използвате табулация за навигиране до бутона.
<Style TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<ScrollViewer x:Name="PART_ContentHost" />
<Button>Template-Button</Button>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Тоест все още можете да навигирате напред-назад между текстовата област и бутона „Щракнете върху мен“ (който все още е отделна контрола), но няма да достигнете до „Бутона за шаблон“ (който е част от TextBox
) :
Този проблем не възниква при стил Windows 7 Basic.
Изглежда, че това е вярно за шаблони TextBox
, но не непременно за контроли. Когато създавате шаблон Button
, можете да достигнете до всяка част от контролата. В следващия пример можете да достигнете до ComboBox
, както и до TextBox
.
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<ComboBox>ComboBox</ComboBox>
<TextBox>TextBox</TextBox>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Чудя се защо е така и дали има някакво решение, различно от това да не използвам ControlTemplate
и „злоупотреба“ с друга контрола (като Button
), тъй като губя TextBox
-функции и трябва да ги внедря отново.
За съжаление не намерих нищо при търсене в интернет. Намерих някои източници, според които класическите шаблони на Windows са внедрени по различен начин от съответните шаблони на Aero (например проблемът с подплънките), но Не съм сигурен дали това се отнася и за спирането на табулатора (въпреки че има свойство IsTabStop
- поне не можах да коригирам този проблем, като изрично задам това свойство на True
).
И така, мога ли да направя нещо?
Някои допълнителни бележки:
Още по-лошо е за PasswordBox, тъй като не можете да достигнете никакви шаблонни елементи както за класическата, така и за основната тема на Windows 7.
Този проблем може да се възпроизведе на система Windows 7, но AFAIK се появява и на Windows 8.