我遇到需要使用TabKey
从一个控件到另一个控件的选项卡。条件是焦点永远不应该控制没有用户输入,因此只有Text
,ComboBox
,List DatePicker
,但不知何故,3个控件之后的焦点得到Focus
在进入控件之前,转到控制组周围的虚线Rectangle
(可能是Grid
,StackPanel,我无法找到)。我已经在谷歌中进行了非常彻底的搜索,并在流程中叠加了一个解决方案,但似乎都没有。
我尝试了各种解决方案:
1)我在FocusVisualStyle
和Grid
启动时将StackPanels
属性设置为null。创建了一个新类:
<StackPanel views:FocusVisualTreeChanger.IsChanged="True" Name="parentStackPanel" Orientation="Vertical" Style="{DynamicResource key1}" FocusVisualStyle="{x:Null}">
public class FocusVisualTreeChanger
{
public static bool GetIsChanged(DependencyObject obj)
{
return (bool)obj.GetValue(IsChangedProperty);
}
public static void SetIsChanged(DependencyObject obj, bool value)
{
obj.SetValue(IsChangedProperty, value);
}
public static readonly DependencyProperty IsChangedProperty =
DependencyProperty.RegisterAttached("IsChanged", typeof(bool), typeof(FocusVisualTreeChanger), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits, IsChangedCallback));
private static void IsChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (true.Equals(e.NewValue))
{
FrameworkContentElement contentElement = d as FrameworkContentElement;
if (contentElement != null)
{
contentElement.FocusVisualStyle = null;
return;
}
FrameworkElement element = d as FrameworkElement;
if (element != null)
{
element.FocusVisualStyle = null;
}
}
}
}
没用。
我尝试将FocusVisualStyle
属性设置为 null 仅Grid
StackPanel
如果我设置了一个断点但是焦点矩形,<Grid Name="AppointmentGrid" Style="{DynamicResource key2}" FocusVisualStyle="{x:Null}">
Style style = new Style { TargetType = typeof(Grid) };
style.Setters.Add(new Setter(Grid.FocusVisualStyleProperty, null));
style.Setters.Add(new Setter(Grid.FocusableProperty, false));
Application.Current.Resources["key2"] = style;
Application.Current.Resources["key3"] = style;
Application.Current.Resources["key4"] = style;
Style style1 = new Style { TargetType = typeof(StackPanel) };
style1.Setters.Add(new Setter(StackPanel.FocusVisualStyleProperty, null));
style1.Setters.Add(new Setter(StackPanel.FocusableProperty, false));
Application.Current.Resources["key1"] = style1;
似乎会通过代码隐藏不会消失:
FocusVisualStyle
任何人都可以帮我解决一下我还没有尝试过的解决方案。 stackoverflow解决方案中没有一个似乎工作。我也设置了Focusable = false,但这似乎也没有帮助。
我也读过:
Remove focus rectangle on a UserControl
WPF Control remove focus and hover effect (FocusVisualStyle?!)
WPF: Remove dotted border around focused item in styled listbox
这就是我认为我被困在了。我在其中一个搜索sites中找到的评论。
这是更改DP默认值的好方法,但在控件的样式显式更改属性值的情况下,它无济于事。不幸的是,Button
就是这样一种财产。更具体地说,ComboBox
,ListBox
,<UserControl
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"
xmlns:csla="http://schemas.lhotka.net/4.2.0/xaml"
xmlns:input="clr-
FocusVisualStyle="{x:Null}"
Focusable="False"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
mc:Ignorable="d" d:DesignWidth="948"
IsTabStop="False"
TabIndex="-1">
<StackPanel views:FocusVisualTreeChanger.IsChanged="True" Name="parentStackPanel" Orientation="Vertical" Style="{DynamicResource key1}" FocusVisualStyle="{x:Null}"><Grid Name="AppointmentGrid" Style="{DynamicResource key2}" FocusVisualStyle="{x:Null}">
等控件的样式往往明确包含FocusVisualStyle属性的Setter。此setter将覆盖您通过覆盖元数据建立的默认值。
有人可以提出一个适合我案例的解决方案。我有一个用户控件
{{1}}
由于 Dhiren