按Tab键将焦点更改为新行

时间:2015-04-17 14:55:42

标签: c# wpf xaml

视图模型具有可观察的Line个对象集合和AddLine()方法。

public class ViewModel : Notifiable
{
    ObservableCollection<Line> Lines {get; set;}
    public void AddLine() { /*add*/ }
}

public class Line : Notifiable
{
    public LineData LineData {get;set;} 
}

LineData包含我绑定的字段。

视图(XAML)的Grid ItemsControl绑定到可观察集合,DataTemplate用于显示Line对象。 Grid上存在其他控件。

<Grid>
    <ItemsControl ItemsSource={Binding Lines}>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                 <ContentControl Content="{Binding LineData}"/>
             </DataTemplate>
         </ItemsControl.ItemTemplate>
    </ItemsControl>
    <!-- other controls -->
</Grid>

LineData类型资源DataTemplate的{​​{1}}和Grid几个。

我希望用户能够将TextBoxes TextBox中的最后LineData标签添加到新的DataTemplate

到目前为止,我已经为预览键向下事件设置了一个事件处理程序,如下所示:

Line

这成功添加了行,并且新行显示在屏幕上,但如果用户位于集合的最后一行,则焦点不会更改为新行中的第一个控件,而是更改为下一个控件在 private void Amount_PreviewKeyDown(object sender, KeyEventArgs e) { var key = e.Key == Key.Tab || e.Key == Key.Enter; if (key) (DataContext as ViewModel).AddLine(); } 上。

我不确定为什么会这样。我想XAML直到焦点改变之后才会更新,或者某些事情。

如何将焦点转移到Grid中新创建的行,而不是ItemsControl上的下一个控件?

0 个答案:

没有答案