【问题标题】:Preventing user from tabbing outside of Frame防止用户在 Frame 之外进行选项卡
【发布时间】:2011-07-01 02:47:41
【问题描述】:

在我的 WPF 应用程序中,我有一个包含各种按钮和框架的页面。在这个框架内是一些文本框。

开始时,我将焦点设置在框架内的第一个文本框上。有什么办法可以确保 Tab 只循环框架内的元素,而不跳到父页面之外?

提前谢谢你。

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    为框架外的控件设置IsTabStop=false

    【讨论】:

    • 感谢您的意见。这在我的情况下不起作用,但你指出我找到my solution的正确方向。
    【解决方案2】:

    为了解决这个问题,我设置了

    KeyboardNavigation.TabNavigation="Cycle"
    

    在框架上。

    【讨论】:

      【解决方案3】:

      tabstop 可以工作。

      现在我的替代解决方案 - 只是假设:框架内的第一个元素的 tabindex 等于 5,框架内的最后一个元素的 tabindex 等于 9。取框架范围内具有最大 tabindex 的元素(即根据假设元素表索引 9)。在PreviewKeyDown事件上写下如下代码:

      private void frames_max_tabindex_element_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
              {
                  if (e.KeyValue == 9 )
                  element_that_has_tabindex_equal_to_frames_min_tab_index_minus_1.Focus();
              }
      

      简要说明。 (使用假设来演示想法)当焦点位于 tabindex 9 的框架元素上时,按下 tab 将触发 PreviewKeyDown 事件。在方法中,你将焦点设置到 tabindex 等于 4 的元素。在 tab 键被释放后,窗口会将焦点设置到下一个 tabindex,即 tabindex 等于 5 的元素。所以从tabindex = 9 你正在跳转到 tabindex = 5 的元素

      【讨论】:

      • 不要那样做。在消息处理之间修改焦点肯定会在某些设置中搞砸。
      • @Florian Greinacher 你是什么意思?为什么“肯定”?
      猜你喜欢
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2018-05-29
      • 2012-06-23
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多