我有一個ObservableCollectiong<StringWrapper>
(StringWrapper每this post)命名段落綁定到一個ItemsControl的ItemTemplate只是一個文本框綁定到StringWrapper.Text
。WPF ItemsControl - 添加項目時更改焦點
XAML
<ItemsControl Name="icParagraphs" Grid.Column="1" Grid.Row="7" ItemsSource="{Binding Path=Paragraphs, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<StackPanel Orientation="Vertical">
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Name="tbParagraph" TextWrapping="Wrap" AcceptsReturn="False" Text="{Binding Path=Text}" Grid.Column="0" KeyUp="tbParagraph_KeyUp" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C#
public class StringWrapper
{
public string Text { get; set; }
public StringWrapper()
{
Text = string.Empty;
}
public StringWrapper(string text)
{
Text = text;
}
}
我想使它所以當我按在文本框中輸入,我的StringWrapper後,我的ObservableCollection插入StringWrapper綁定到當前聚焦的文本框,從而生成新的文本框。到目前爲止,我的代碼是這樣做的,儘管有一些小問題需要解決。
我的問題是,然後我如何設置焦點到新生成的文本框?據我所知,控件生成發生在插入字符串的函數返回後。
我查找了像ItemsControl.ItemsSourceChanged事件,但至少該名稱不存在。我也嘗試將一個處理程序附加到ObservableCollection.CollectionChanged,但在生成TextBox之前似乎也觸發了它。最後,由於ItemsControl.Template是一個StackPanel,我查找了一個StackPanel.ControlAdded事件,但找不到那個。
想法?謝謝!
這個伎倆!謝謝! – dfoverdx 2014-10-20 18:04:18
很酷,將我的評論移至答案,以便您接受它。 – 2014-10-20 18:05:00
我有同樣的問題,但不能真正得到解決方案 – MSIslam 2015-03-31 22:32:19