代码之家  ›  专栏  ›  技术社区  ›  Steve Greatrex

检测WPF焦点到达焦点范围的末尾

  •  7
  • Steve Greatrex  · 技术社区  · 15 年前

    在WPF中,我可以指定控件容器是焦点作用域,并且选项卡导航应该在控件之间循环(即,当我的选项卡离开最终控件时,焦点将返回到第一个):

    <Border FocusManager.IsFocusScope="True" KeyboardNavigation.TabNavigation="Cycle">
    <ItemsControl ItemsSource="{Binding}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox x:Name="Editor" Text="{Binding}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Border>
    

    我想做的是检测 什么时候 焦点离开最后一个领域。在不确切知道焦点范围内控件的数量的情况下,有人知道这是否可能吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Josh G    14 年前

    正如您所发现的,这个功能似乎没有内置到WPF中。

    我的建议是建立一个附加的行为来处理这个问题。

    如果您有Blend并且可以使用System.Windows.Interactivity,只需从行为类派生并重写OnAttached和OnAttached。否则,编写一个静态行为类 here .

        2
  •  -1
  •   Steve Greatrex    14 年前

    为了结束这个问题,我把我的评论改成了答案。解决方案基本上是在视图模型中保留所选项目的记录,并对该记录的更改做出反应。一般来说,我不认为视图模型应该知道控制焦点,但是在这种情况下,我认为这是必需的,因为视图模型需要对焦点的变化做出反应。

    附加属性使其与当前键盘保持一致 集中