Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Wpf文本框获得Focus()时更改其聚焦边框颜色_C#_Wpf_Vb.net - Fatal编程技术网

C# 在Wpf文本框获得Focus()时更改其聚焦边框颜色

C# 在Wpf文本框获得Focus()时更改其聚焦边框颜色,c#,wpf,vb.net,C#,Wpf,Vb.net,我想要的是:当任何文本框都有焦点时,将边框颜色更改为黄色 我尝试的是: <Window.Resources> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderBrush" Value="

我想要的是:当任何文本框都有焦点时,将边框颜色更改为黄色

我尝试的是:

<Window.Resources>
    <Style TargetType="TextBox">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="BorderBrush" Value="Yellow"></Setter>
                <Setter Property="BorderThickness" Value="1"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

没有快乐。无法理解为什么边框保持蓝色。
这与类似,但不是的副本。

您需要修改文本框的控件模板。仅向样式添加触发器是不够的。这应该起作用:

<Style TargetType="TextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" TargetName="border" Value="0.56"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>
                    </Trigger>
                    <Trigger Property="IsFocused" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="Yellow"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


您可以在WPF源代码中找到原始样式模板:

太棒了!现在,如果我可以问的话,请解释一下这是如何工作的,为什么我的代码没有工作#我应该补充一点,我以前尝试过控件模板,但只通过删除所有样式成功地删除了文本框-/您的代码不起作用,因为TextBox的默认控件模板为IsKeyboardFocused属性定义了一个DataTrigger,该属性将BorderBrush属性设置为硬编码的笔刷值。这就是为什么需要覆盖整个模板。