繁体   English   中英

WPF-DataTemplate中的焦点控件应用于FlyoutControl

[英]WPF - Focus Control Within DataTemplate applied to FlyoutControl

我有一个包含文本框的DataTemplate。 DataTemplate绑定到DevExpress FlyoutControl的样式的ContentTemplate属性。 弹出控件本身在另一个TextBox的ControlTemplate中。

当带有FlyoutControl的TextBox处于焦点状态时,我想将焦点重定向到FlyoutControl的ContentTemplate中的第一个TextBox(来自DataTemplate)。 在我要聚焦的TextBox上设置FocusManager.FocusedElement = {Binding RelativeSource = {RelativeSource Self}}会在第一次完成此操作,但是一旦Flyout加载后,它将不再起作用。

我尝试了所有可以找到的建议,但到目前为止没有任何效果。 我可以在代码中获取要引用的TextBox并调用Focus(),但它始终返回false。 充其量,当我尝试将其聚焦于代码时,Flyout会被聚焦,而不是Flyout中的TextBox。

这是每个相关部分的样子(省略了无关的代码):

<DataTemplate x:Key="FlyoutTemplate">
   <Grid>
      <dxe:TextEdit x:Name="TextThatWantsFocus"
        FocusManager.FocusedElement={Binding RelativeSource={RelativeSource Self}}" />
   </Grid>
</DataTemplate>

...

<Style x:Key="FlyoutStyle" TargetType="dxe:FlyoutControl">
   <Setter Property="ContentTemplate" Value="{StaticResource FlyoutTemplate}"/>
</Style>

...

<dxe:TextEdit>
   <dxe:TextEdit.Template>
      <ControlTemplate>
         <StackPanel>
            <dxe:TextEdit x:Name="InnerTextEdit" />
            <dxe:FlyoutControl Style="{StaticResource FlyoutStyle}"/>
         </StackPanel>
      </ControlTemplate>
   </dxe:TextEdit.Template>
</dxe:TextEdit>

正在使用代码打开弹出按钮。 在这里,我也想重点关注TextBox(TextThatWantsFocus)。 但是,我尝试过的所有操作都不会给它焦点(除了FocusManager第一次处理它以外),包括涉及触发器的典型SO答案。 任何想法将不胜感激。

我接受了DmitryG的建议,并提交了DevExpress支持票,他们能够提供解决方案。

通过处理我要关注的TextEdit的Loaded事件并使用分派器对其进行关注,已解决了该问题:

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

我建议您使用DevExpress MVVM Framework中的FocusBehavior:

<DataTemplate x:Key="FlyoutTemplate">
   <Grid>
      <dxe:TextEdit>
        <dxmvvm:Interaction.Behaviors>
            <local:FocusBehavior/>
        </dxmvvm:Interaction.Behaviors>
      </dxe:TextEdit>
   </Grid>
</DataTemplate>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM