WPF:當用戶在ItemsControl中的texbox內按下Enter鍵時,我想將焦點移動到ItemsControl中下一項中的文本框中,或者創建一個如果用戶在最後一項中,則爲新的。WPF:將焦點移動到ItemsControl上的下一個項目上輸入
爲了更清楚:
方案1
ItemsControl items:
[ textbox in item 1 ] <- user is here
[ textbox in item 2 ]
[ textbox in item 3 ]
按下回車鍵後:
[ textbox in item 1 ]
[ textbox in item 2 ] <- user is here
[ textbox in item 3 ]
方案2
ItemsControl的項目:
[ textbox in item 1 ]
[ textbox in item 2 ]
[ textbox in item 3 ] <- user is here
之後按Enter:
[ textbox in item 1 ]
[ textbox in item 2 ]
[ textbox in item 3 ]
[ textbox in item 4 ] <- user is here
如果有幫助,這裏是項目數據模板的代碼:
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<TextBox Text="{Binding Path=PartName, FallbackValue='----',TargetNullValue='----', NotifyOnSourceUpdated=True}" KeyDown="TextBox_KeyDown"/>
<Button Grid.Column="1" FontSize="10" x:Name="DeletePartButton" Click="DeletePartButton_Click" Height="22">Usuń</Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
編輯2: 我使用ItemsControl的,因爲選擇功能不想要的。
編輯3: 我找到了部分解決方案。它適用於移動焦點到下一個元素,而不是一個新的(這是最重要的功能在這裏)
private void PartNameTextBox_KeyDown(object sender, KeyEventArgs e)
{
var box = (TextBox)sender;
if (e.Key == Key.Enter)
{
var part = (PiecePart)box.DataContext;
int index = part.ParentPiece.Parts.IndexOf(part);
if (index == part.ParentPiece.PartCount - 1)
{
part.ParentPiece.Parts.Add(new PiecePart(GetNewPartName(part.ParentPiece)));
bool success = PartListBox.ApplyTemplate();
// try to force wpf to build a visual tree for the new item success = false :(
}
// throws out of bounds exception if a new item was added (and wasn't added to a visual tree)
var el = ((UIElement)VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(PartListBox, 0),0),1),0),0),++index),0),0));
el.Focus();
}
}
這不起作用,因爲如果用戶在TextBox中沒有選擇項目。順便說一下,我已經切換到ItemsControl,因爲我根本不想選擇功能。 – 2015-03-13 09:31:58
即使用戶不關注列表框,您是否需要選擇該項目? – 2015-03-13 09:38:59
我不想選擇一個項目,我想將焦點移動到所需項目中的TextBox。 – 2015-03-13 09:58:42