我想全局停用WPF应用程序中的焦点矩形。对于可以通过以下方式完成的单个控件
<Style TargetType="Button">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>
而是如何将其应用于我的应用程序中的所有控件。当应用于FrameworkElement时,不会发生任何情况。我需要的是类似于“应用于类x和所有派生类”的东西。
提前谢谢你,
斯特凡
发布于 2009-08-14 21:11:55
发布于 2010-02-10 23:31:13
根据http://msdn.microsoft.com/en-us/library/bb613567.aspx的说法,你应该能够像这样设置全局焦点样式:
<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中包含了这种样式)。
发布于 2017-06-20 23:39:53
我也偶然发现了这一点,并提出了这个(确实不是很好,但很有效)的解决方案:
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();
https://stackoverflow.com/questions/1055670
复制相似问题