簡體   English   中英

WPF ItemsControl-添加項目時更改焦點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM