XAML文本框更改焦点上的边框颜色

时间:2016-07-22 23:10:42

标签: wpf xaml textbox

问题

我目前遇到的问题是,在'IsFocused'属性中,我能够触发文本框的背景更改,但是当我想更改BorderBrush时,它不起作用。

            <TextBox Padding="2" FontFamily="Sans Serif" Foreground="Red" FontSize="10px" FontWeight="Medium" Width="200" BorderThickness="2" VerticalAlignment="Center">
            <TextBox.Resources>
                <Style TargetType="{x:Type Border}">
                    <Setter Property="CornerRadius" Value="2"/>
                </Style>
            </TextBox.Resources>
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="BorderBrush" Value="#858585"/>
                    <Style.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="BorderBrush" Value="Red" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>

任何人都可以看到为什么这不起作用的原因?

修改

我刚刚发现,当我'右键单击'时,它会变为红色?我希望当用户点击文本框时它会变为红色。

3 个答案:

答案 0 :(得分:3)

尝试使用该代码

        <TextBox 

                 Padding="2"  FontFamily="Sans Serif" 
                 Foreground="Red" FontSize="10px"
                 FontWeight="Medium" Width="200"  
                 VerticalAlignment="Center">


            <TextBox.Style>

                <Style BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
                    <Setter Property="BorderThickness" Value="2"/>
                    <Setter Property="Padding" Value="1"/>
                    <Setter Property="AllowDrop" Value="true"/>
                    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type TextBox}">
                                <Border x:Name="bg" BorderBrush="#FF825E5E" BorderThickness="1">
                                    <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                </Border>
                                <ControlTemplate.Triggers>

                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="BorderBrush" TargetName="bg" Value="Red"/>
                                        <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                                    </Trigger>

                                    <Trigger Property="IsFocused" Value="True">
                                        <Setter Property="BorderBrush" TargetName="bg" Value="Red"/>
                                        <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                                    </Trigger>


                                    <Trigger Property="IsFocused" Value="False">
                                        <Setter Property="BorderBrush" TargetName="bg" Value="#858585"/>
                                        <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                                    </Trigger>

                                    <Trigger Property="IsMouseOver" Value="False">
                                        <Setter Property="BorderBrush" TargetName="bg" Value="#858585"/>
                                        <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                                    </Trigger>

                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

            </TextBox.Style>
       </TextBox>

答案 1 :(得分:0)

这是由植入文本框样式本身的视觉状态触发器引起的,它们会覆盖您要添加的任何触发器,更改您必须更改样式的边框颜色,只需按照以下步骤操作即可:< / p>

步骤1:以混合方式打开您的项目,因为它更适合设计控件。

第2步:在页面中添加文本框。

第3步:右键单击您的文本框并选择:&#34; EditTemplate&#34; \&#34;编辑副本...&#34;

这将带您进入模板设计师阶段。

第4步:检查此图片:https://postimg.org/image/ocdn34is1/

答案 2 :(得分:0)

尝试使用TextBox的GotFocus和LostFocus事件,并从后面的代码中执行。

<TextBox x:Name="txtBox" ...
             GotFocus="YourHandler1" LostFocus="YourHandler2"> ... </TextBox>

然后,您必须在YourHandler1中将边框颜色设置为红色,并在YourHandler2中将其设置回默认值。 (&#39;发件人&#39;将是你的TextBox,所以这没什么大不了的。)