首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >全局停用FocusVisualStyle

全局停用FocusVisualStyle
EN

Stack Overflow用户
提问于 2009-06-28 20:25:51
回答 6查看 11.1K关注 0票数 19

我想全局停用WPF应用程序中的焦点矩形。对于可以通过以下方式完成的单个控件

代码语言:javascript
复制
<Style TargetType="Button">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>

而是如何将其应用于我的应用程序中的所有控件。当应用于FrameworkElement时,不会发生任何情况。我需要的是类似于“应用于类x和所有派生类”的东西。

提前谢谢你,

斯特凡

EN

回答 6

Stack Overflow用户

发布于 2009-08-14 21:11:55

Stack Overflow用户

发布于 2010-02-10 23:31:13

根据http://msdn.microsoft.com/en-us/library/bb613567.aspx的说法,你应该能够像这样设置全局焦点样式:

代码语言:javascript
复制
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate>
        <Rectangle StrokeThickness="1"
          Stroke="Black"
          StrokeDashArray="1 2"
          SnapsToDevicePixels="true"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style> 

我还没有测试过它,但我猜当你清空控件模板时,这将有效地禁用整个应用程序的焦点矩形(前提是你在app.xaml中包含了这种样式)。

票数 3
EN

Stack Overflow用户

发布于 2017-06-20 23:39:53

我也偶然发现了这一点,并提出了这个(确实不是很好,但很有效)的解决方案:

代码语言:javascript
复制
public class FocusVisualStyleRemover
{
  static FocusVisualStyleRemover()
  {
    EventManager.RegisterClassHandler(typeof(FrameworkElement), FrameworkElement.GotFocusEvent, new RoutedEventHandler(RemoveFocusVisualStyle), true);
  }

  public static void Init()
  {
    // intentially empty
  }

  private static void RemoveFocusVisualStyle(object sender, RoutedEventArgs e)
  {
    (sender as FrameworkElement).FocusVisualStyle = null;
  }
}

在我的主窗口的构造函数中,我只需调用FocusVisualStyleRemover.Init();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1055670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档