[英]WPF ItemsControl - Change focus when item added
我有一個名為ObservableCollectiong<StringWrapper>
(每篇文章均為StringWrapper)的Paragraphs綁定到ItemsControl,ItemsControl的ItemTemplate只是綁定到StringWrapper.Text
的TextBox。
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;
}
}
我試圖做到這一點,所以當我在TextBox中按Enter時,在將StringWrapper綁定到當前聚焦的TextBox之后,在我的ObservableCollection中插入一個StringWrapper,這會生成一個新的TextBox。 到目前為止,盡管有一些小問題需要解決,但是我的代碼可以做到這一點。
我的問題是, 然后如何將焦點設置到新生成的TextBox? 據我所知,控件的生成發生在插入字符串的函數返回之后。
我尋找了類似ItemsControl.ItemsSourceChanged事件的東西,但至少該名稱不存在。 我還嘗試將處理程序附加到ObservableCollection.CollectionChanged,但是在生成TextBox之前似乎也是如此。 最后,由於ItemsControl.Template是StackPanel,所以我尋找了StackPanel.ControlAdded事件,但都找不到。
有想法嗎? 謝謝!
您可能必須處理CollectionChanged
,然后使用優先級為Loaded
Dispatcher.BeginInvoke
安排焦點動作在將來發生。 這應該使ItemsControl
有機會生成容器並執行布局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.