C# WPF-应用于弹出控件的DataTemplate内的焦点控件

C# WPF-应用于弹出控件的DataTemplate内的焦点控件,c#,wpf,focus,devexpress,datatemplate,C#,Wpf,Focus,Devexpress,Datatemplate,我有一个包含文本框的数据模板。DataTemplate绑定到DevExpress弹出控件样式的ContentTemplate属性。弹出控件本身位于另一个文本框的ControlTemplate中 当带有弹出控件的文本框被聚焦时,我想将焦点重定向到弹出控件的ContentTemplate(从DataTemplate)中的第一个文本框。在“我希望聚焦”文本框上设置FocusManager.FocusedElement={Binding RelativeSource={RelativeSource Se

我有一个包含文本框的数据模板。DataTemplate绑定到DevExpress弹出控件样式的ContentTemplate属性。弹出控件本身位于另一个文本框的ControlTemplate中

当带有弹出控件的文本框被聚焦时,我想将焦点重定向到弹出控件的ContentTemplate(从DataTemplate)中的第一个文本框。在“我希望聚焦”文本框上设置FocusManager.FocusedElement={Binding RelativeSource={RelativeSource Self}}}第一次可以完成此操作,但一旦弹出按钮加载,它就不再工作

我已经尝试了我能找到的每一个建议,但到目前为止没有任何效果。我可以获取要在代码中引用的文本框并调用Focus(),但它总是返回false。在最好的情况下,当我试图在代码中聚焦它时,弹出按钮会被聚焦,但决不会聚焦弹出按钮中的文本框

以下是每个相关部分的外观(不相关的代码省略):



我建议您从以下位置使用FocusBehavior:


我建议您从以下位置使用FocusBehavior:


我建议您从以下位置使用FocusBehavior:


我建议您从以下位置使用FocusBehavior:


我接受了DmitryG的建议,提交了一份develxpress支持单,他们能够提供解决方案

通过处理TextEdit I want focused的已加载事件并使用dispatcher对其进行聚焦,问题得以解决:

private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
    var text = obj as FrameworkElement;
    Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
        { text.Focus(); }));
}

我接受了DmitryG的建议,提交了一份DevExpress支持单,他们能够提供解决方案

通过处理TextEdit I want focused的已加载事件并使用dispatcher对其进行聚焦,问题得以解决:

private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
    var text = obj as FrameworkElement;
    Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
        { text.Focus(); }));
}

我接受了DmitryG的建议,提交了一份DevExpress支持单,他们能够提供解决方案

通过处理TextEdit I want focused的已加载事件并使用dispatcher对其进行聚焦,问题得以解决:

private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
    var text = obj as FrameworkElement;
    Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
        { text.Focus(); }));
}

我接受了DmitryG的建议,提交了一份DevExpress支持单,他们能够提供解决方案

通过处理TextEdit I want focused的已加载事件并使用dispatcher对其进行聚焦,问题得以解决:

private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
    var text = obj as FrameworkElement;
    Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
        { text.Focus(); }));
}

尝试使用一种行为。您可以创建一个自定义行为,将特定控件的焦点放在某个事件上,然后将该行为附加到相应的控件(即您的文本框)上,以便无论何时该行为可见或您感兴趣的任何事件,它都会获得焦点。请尝试使用行为。您可以创建一个自定义行为,将特定控件的焦点放在某个事件上,然后将该行为附加到相应的控件(即您的文本框)上,以便无论何时该行为可见或您感兴趣的任何事件,它都会获得焦点。请尝试使用行为。您可以创建一个自定义行为,将特定控件的焦点放在某个事件上,然后将该行为附加到相应的控件(即您的文本框)上,以便无论何时该行为可见或您感兴趣的任何事件,它都会获得焦点。请尝试使用行为。您可以创建一个自定义行为,将特定控件的焦点放在某个事件上,然后将该行为附加到相应的控件(即您的文本框)上,以便无论何时该行为可见或您感兴趣的任何事件,它都会抓住焦点。这似乎很有希望,但在玩了一段时间后,我得出结论,FocusBehavior将无法与模板之外的任何控件一起工作。例如,如果我在模板中放置一个按钮并使用其单击事件触发FocusBehavior,它会工作,但如果我尝试使用模板中未包含的任何控件(包括弹出按钮),它会失败。可能是,可能是..因此现在是时候直接联系DevExpress支持人员了。根据我的经验,他们的人在大多数情况下都能提供一个合适的解决方案。这看起来很有希望,但在玩了一段时间后,我得出结论,FocusBehavior不会与模板之外的任何控件一起工作。例如,如果我在模板中放置一个按钮并使用其单击事件触发FocusBehavior,它会工作,但如果我尝试使用模板中未包含的任何控件(包括弹出按钮),它会失败。可能是,可能是..因此现在是时候直接联系DevExpress支持人员了。根据我的经验,他们的人在大多数情况下都能提供一个合适的解决方案。这看起来很有希望,但在玩了一段时间后,我得出结论,FocusBehavior不会与模板之外的任何控件一起工作。例如,如果我在模板中放置一个按钮并使用其单击事件触发FocusBehavior,它会工作,但如果我尝试使用模板中未包含的任何控件(包括弹出按钮),它会失败。可能是,可能是..因此现在是时候直接联系DevExpress支持人员了。根据我的经验,他们的人在大多数情况下都能提供一个合适的解决方案。这看起来很有希望,但在玩了一段时间后,我得出结论,FocusBehavior不会与模板之外的任何控件一起工作。例如,如果我在模板中放置一个按钮并使用其单击事件触发FocusBehavior,它会工作,但如果我尝试使用模板中未包含的任何控件(包括弹出按钮),它会失败。可能是,可能是..因此现在是时候直接联系DevExpress支持人员了。根据我的经验,他们的人在大多数情况下都能提供合适的解决方案。
private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
    var text = obj as FrameworkElement;
    Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
        { text.Focus(); }));
}