我已经尝试了一切我能想到的,只要父FlowDocument
可见,我的UserControl
就可以接受焦点:
public DesignView()
{
InitializeComponent();
IsVisibleChanged += OnIsVisibleChanged;
}
private void OnIsVisibleChanged(object sender,
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
if (Document.Focusable)
{
if (!Document.Focus())
{
FocusManager.SetFocusedElement(Document, Document);
Keyboard.Focus(Document);
Document.Dispatcher.BeginInvoke(
DispatcherPriority.Input,
new ThreadStart(delegate
{
Keyboard.Focus(Document);
FocusManager.SetFocusedElement(Document, Document);
Document.Focus();
})
);
}
}
}
正如您所看到的,我已经尝试了FocusManager.SetFocusedElement()
,Keyboard.Focus()
和Document.Focus()
,所有这些都取得了相同程度的成功...然后在单独的线程中尝试了每个方法,没有快乐。
我并没有同时尝试所有这些,只是试图说明这些方法中没有一个是有效的,尽管Document.Focusable
总是true
。
修改
我的目标是让键盘焦点在FlowDocument中,以便用户可以立即开始键入。一切都在打字方式,但我不能让它一旦显示就得到它。
在此之后,IsFocused仍然是假的,FlowDocument
中的键盘焦点不是。