繁体   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