在xaml中删除默认文本框边框动画

时间:2014-05-27 09:47:49

标签: c# wpf xaml

我的所有文本框都有这样的全局样式:

<Style TargetType="TextBox">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="Red"/>                
        </Trigger>
    </Style.Triggers>
    <Setter Property="BorderBrush" Value="#007acc"/>        
    <Setter Property="Foreground" Value="GhostWhite"/>
    <Setter Property="Background" Value="#49494e"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="Width" Value="250"/>
    <Setter Property="Margin" Value="0,0,0,5"/>
</Style>

当我将鼠标悬停在文本框上时,其边框颜色将在几个瞬间正确捕捉到红色,但默认动画将接管并将其更改为默认文本框蓝色边框颜色。

如何在不重新定义整个文本框模板的情况下禁用或覆盖此动画?我只想让边框颜色保持红色,而鼠标光标悬停在文本框上。

2 个答案:

答案 0 :(得分:2)

您问题的一个解决方案是更改Template

TextBox
<Style TargetType="{x:Type TextBox}">
   <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="BorderBrush" Value="Red"/>
      </Trigger>
   </Style.Triggers>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type TextBox}">
            <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1">
               <ScrollViewer x:Name="PART_ContentHost"/>
            </Border>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
   <Setter Property="BorderBrush" Value="#007acc"/>
   <Setter Property="Foreground" Value="GhostWhite"/>
   <Setter Property="Background" Value="#49494e"/>
   <Setter Property="HorizontalAlignment" Value="Left"/>
   <Setter Property="Width" Value="250"/>
   <Setter Property="Margin" Value="0,0,0,5"/>
</Style>

答案 1 :(得分:0)

这实际上是属性优先的已知问题。基本上,边框画笔的本地属性设置器与您的触发器发生冲突。这个Msdn article更全面地解释了它,但基本上如果你删除了

    <Setter Property="BorderBrush" Value="#007acc"/>  

你的触发器应该可以正常工作