我有一个按预期成功更改的 ContentTemplateSelector。它在一个列表框中,其中包含一堆文本块,然后当您在列表框中选择一个项目时,该项目会将其模板更改为具有一个文本框(因此可以对其进行编辑)。
我遇到的问题是文本框没有获得焦点。这有点烦人。
所以我一直在尝试为列表框实现一个附加属性,该属性在设置时会将一个事件处理程序附加到 SelectionChanged 事件。从那里,我希望向下钻取,找到文本框并设置其焦点。
但是,我遇到了一个障碍,似乎 TemplateSelector 尚未选择合适的模板(带有文本框的模板)。事实上,Template 是 NULL。这让我相信它已经删除了 TextBlock 模板,并且很快就会选择正确的模板,但只有在整个 SelectionChanged 事件完成之后。
我的问题是,您是否知道一种方法可以强制此 DataTemplate 告诉它的 ContentTemplateSelector 选择适当的模板,或者,当 ListboxItem 获得焦点时,关于如何在模板中选择此文本框的不同想法?
以下是我获取 ContentPresenter 的方法(来自所选的 ListboxItem):
ContentPresenter cp = FindVisualChild<ContentPresenter>(lbi);
编辑:我在此之后添加了cp.ApplyTemplate(),但这并没有改变任何东西。
不过此时 cp.ContentTemplate为空。