在UserControl中删除WPF中的焦点矩形

时间:2013-07-15 19:26:38

标签: c# wpf xaml styles focus

我遇到需要使用TabKey从一个控件到另一个控件的选项卡。条件是焦点永远不应该控制没有用户输入,因此只有TextComboBoxList DatePicker,但不知何故,3个控件之后的焦点得到Focus在进入控件之前,转到控制组周围的虚线Rectangle(可能是Grid,StackPanel,我无法找到)。我已经在谷歌中进行了非常彻底的搜索,并在流程中叠加了一个解决方案,但似乎都没有。

我尝试了各种解决方案:

1)我在FocusVisualStyleGrid启动时将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就是这样一种财产。更具体地说,ComboBoxListBox<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

0 个答案:

没有答案