【问题标题】:MVVM-Block Tab key in WPFWPF 中的 MVVM 块 Tab 键
【发布时间】:2014-06-06 21:08:05
【问题描述】:

我正在使用 MVVM 在 WPF 中工作。我实现了 WPF 扩展工具包并使用了 ChildWindow,当我打开 ChildWindow 时,属性 IsModal 被启用。但是这个属性不会阻止使用 Tab 导航。

当 ChildWindos 打开时,我需要用 Tab 阻止导航。

我尝试使用 Focusable 属性,但没有服务。

【问题讨论】:

  • 我在一个示例项目上对此进行了测试,我同意您的观察。有什么方法可以使用 System.Windows 命名空间中的 Window 类并使用 ShowDialog 方法显示它?我相信制表符有效以您期望的方式。如果在查看 ChildWindow 控件中 IsModal 属性的源代码后找到更好的选择,我将更新答案
  • 这种行为似乎是设计使然。 Modal 层仅阻止用户通过单击控件直接与控件交互。为此,我在 codeplex 中创建了一个新问题。 wpftoolkit.codeplex.com/workitem/21062

标签: wpf mvvm childwindow


【解决方案1】:

我了解您的问题在于显示 ChildWindow 时背景中的选项卡。

你应该尝试修改de Window的属性KeyboardNavigation.TabNavigation

如果您使用 MVVM 模式,请在 XAML 中执行以下操作:

<Window
KeyboardNavigation.TabNavigation="{Binding TabNavigationMode}"
>

在 ViewModel 中:

private KeyboardNavigationMode _tabNavigationMode;
public KeyboardNavigationMode TabNavigationMode
{
  get { return _tabNavigationMode; }
  set { _tabNavigationMode = value; RaisePropertyChanged("TabNavigationMode");
}

并创建一个这样的方法,当您打开和关闭子窗口时调用它

public void IsTabNavigationEnable(bool isEnable)
{
    if (isEnable) TabNavigationMode = KeyboardNavigationMode.Contained;
    else TabNavigationMode = KeyboardNavigationMode.None;
}

我试过了,效果很好。该选项卡在后台被禁用,但在 ChildWindow 中没有。

【讨论】:

    【解决方案2】:

    这是一个已知问题,扩展工具包团队需要解决它。同时,如果您仍想使用 ChildWindow 实现此功能,我建议订阅 PreviewKeyDown 事件并手动更改子窗口进入模态时的 tab 和箭头键。

    问题的链接是

    https://wpftoolkit.codeplex.com/discussions/252462

    【讨论】:

    • 也许您的解决方案可以做到。但是打破了MVVM的原理。
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2011-11-07
    • 2011-04-16
    • 2011-10-07
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多