簡體   English   中英

如何在UserControl內部控制鍵盤焦點

[英]How To Control Keyboard Focus Inside a UserControl

我有一個簡單的UserControl其中包含一些TextBlock 另外,我在StackPanel還有一些UserControl ,通常當我按箭頭鍵時,鍵盤焦點會在UserControl之間移動,這就是我不希望的行為。

我想處理UserControl內的箭頭鍵按下並停止鍵盤導航的正常行為,就像TextBox 我怎樣才能做到這一點?

<StackPanel  >
    <dtp:DatePicker  VerticalAlignment="Top"/> <!-- When I press down arrow key on this element, keyboard navigation moves to next element-->
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="DateOnly"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="TimeOnly"/>
    <dtp:DatePicker  VerticalAlignment="Top" HasSeconds="False"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="DateOnly" HasSeconds="False"/>
    <dtp:DatePicker  VerticalAlignment="Top" DisplayType="TimeOnly" HasSeconds="False"/>
</StackPanel>

通常,對於僅位於StackPanel內部的控件,簡單的控件在按箭頭鍵時不會失去焦點。 您可以通過這個小測試來嘗試一下。

<StackPanel>
    <DatePicker/>
    <DatePicker/>
    <DatePicker/>
</StackPanel>

也許您的問題不在dtp:DatePicker控件之外。 也許您正在將StackPanel放在ItemTemplate

無論如何,您可以嘗試使用PreviewKeyUp事件中和箭頭鍵,如下所示:

<dtp:DatePicker PreviewKeyUp="OnPreviewKeyUp"/>

private void OnPreviewKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Up || e.Key == Key.Down)
        e.Handled = true;
}

或者,您可以嘗試在導航模式下放置導航約束:

<dtp:DatePicker KeyboardNavigation.DirectionalNavigation="None" 
                KeyboardNavigation.TabNavigation="None"/>

暫無
暫無

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

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