0
我有定義爲WPF控制時從一個小區移動到下一個如下:WPF:按壓輸入一個ItemsControl
<ItemsControl ItemsSource="{Binding DutyValueBinders}" IsEnabled="{Binding Enabled}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value, TargetNullValue=''}" Width="50"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
這產生的網格,看起來像這樣:
因此,雖然在XAML中只定義了一個文本框,但用戶會看到一個網格。
我想要做的是,在用戶鍵入一個值並按下Enter或Return之後,焦點應該傳遞到下一個單元格,等等,直到到達網格的末端。我試圖把這個程序到後面(從#2另一個線程複製)代碼:
private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter || (!e.IsToggled && sender is Button)) return;
var request = new TraversalRequest(FocusNavigationDirection.Next);
var keyboardFocus = Keyboard.FocusedElement as UIElement;
if (keyboardFocus == null) return;
keyboardFocus.MoveFocus(request);
e.Handled = true;
}
和修改的XAML的標題如下:
<UserControl ...
(Other references)
...
d:DesignHeight="300" d:DesignWidth="300" PreviewKeyDown="UserControl_PreviewKeyDown">
麻煩的是,因爲只有一個在XAML定義中沒有tabindex命令,所以當你按下Enter鍵時,光標就會消失。
有沒有什麼辦法可以做到這一點,完全沒有把XAML全部報廢,並重新開始使用不同類型的控制?
我不明白這是如何'ItemsControl'可以產生多個行。 – Maxim