【问题标题】:WPF MVVM disable focus on ContentControl (with the Tab key)WPF MVVM 禁用对 ContentControl 的关注(使用 Tab 键)
【发布时间】:2015-08-21 22:18:35
【问题描述】:

我有一个带有ContentControl 绑定的窗口:

<ContentControl Content="{Binding CurrentViewModel}" />

我还有一个空的用户控件绑定到ContentControl

<UserControl x:Class="UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
    </Grid>
</UserControl>

当我运行并按下选项卡键盘时,我会在内容控件周围看到一个虚线矩形。如何禁用此功能?

我尝试使用Focusable="False"FocusVisualStyle="{x:Null}" 没有成功...

【问题讨论】:

  • 用户控件是否在某处使用?这似乎无关紧要。在 ContentControl 中使用 Focusable="False" 时,它不会采用虚线矩形。您可能需要显示更多代码才能清除它。

标签: wpf mvvm


【解决方案1】:

重写 ContentControl Style 并将属性 FocusVisualStyle 添加为 null 并使用 style 属性实现

<ContentControl Height="200" Width="200" FocusVisualStyle="{x:Null}">
            <ContentControl.Content>
                <local:UserControl1/>
            </ContentControl.Content>
       </ContentControl>

【讨论】:

  • 你能举个例子吗?
  • 我添加了代码示例或您的参考。只需在您的内容控件中将 FocusVisualStyle 添加为 null 就足够了
  • 这只是删除了视觉效果,您仍然需要按两次 Tab 才能离开 ContentControl
【解决方案2】:

您是否尝试过设置 IsTabStop="False",例如...

<ContentControl Height="200" Width="200" IsTabStop="False">
    <ContentControl.Content>
        <TextBox/>
    </ContentControl.Content>
</ContentControl>

我建议你将它与这个技巧结合起来:

Loaded += (sender, e) =>
MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

来自这个问题的答案:WPF and initial focus

【讨论】:

  • 在 ContentControl 上设置 IsTabStop=False 可以很好地防止它从 Tab 键获得焦点。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2011-11-07
  • 2016-04-26
  • 2021-04-18
  • 1970-01-01
相关资源
最近更新 更多