簡體   English   中英

檢測WPF焦點到達焦點范圍的末尾

[英]Detect WPF focus reaching end of focus scope

在WPF中,我可以指定一個控件容器是一個Focus Scope,並且該選項卡導航應循環通過控件(即當我從最終控件中跳出時,焦點將返回到第一個):

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

我想要做的是檢測焦點何時離開最終場。 如果不確切知道焦點范圍內的控件數量,有誰知道這是否可行?

您似乎已經發現,此功能似乎沒有內置到WPF中。

我的建議是建立一個附加行為來處理這個問題。

如果你有Blend並且可以使用System.Windows.Interactivity,只需從Behavior類派生並覆蓋OnAttached和OnDetached。 否則,寫一個靜態類作為證明這里

附加行為后,保存第一個(當前?)焦點項並訂閱焦點更改事件。 在事件處理程序中,跟蹤焦點范圍內的焦點項(應用行為的范圍)。 當焦點項返回第一個項時,觸發路由事件。 有一些細節需要解決。

為了結束這個問題,我正在將我的評論改為答案。 解決方案主要是在視圖模型中保留所選項目的記錄,並對其進行更改。 作為一般規則,我不認為視圖模型應該知道控制焦點,但在這種情況下,我認為這是必需的,因為視圖模型需要對焦點變化做出反應。

最后,我能夠使用默認的集合視圖解決我的特定問題,以保留當前項目的記錄,以及一些附加屬性,以使其與當前鍵盤焦點保持一致

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM