[英]Remove default mouseover/focus effect on textboxes
我在Expression Blend中创建了一种自定义TextBox
。 我已将背景和边框的填充更改为渐变,并添加了阴影效果。
我注意到当我鼠标悬停或聚焦我的TextBox
,WPF的一些默认行为/(样式?)接管并且我的边框被更改。
我想知道是否有任何阻止或阻止WPF在我聚焦或鼠标悬停时改变我的TextBox
es样式。 这可能吗?
更简单的解决方案是将texbox边框粗细设置为0,然后将texbox包装到您自己的边框:
<Border BorderBrush="LightGray" BorderThickness="1">
<TextBox Text="{Binding OutlinePlain, Mode=TwoWay, NotifyOnTargetUpdated=True}"
BorderThickness="0"
</TextBox>
</Border>
您应该使用新模板:
<Style TargetType="{x:Type TextBox}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border
Name="Border"
CornerRadius="2"
Padding="2"
Background="#FFFFFF"
BorderBrush="#888888"
BorderThickness="1" >
<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
<Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
<Setter Property="Foreground" Value="#888888"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我删除了触发器IsMouseOver
在这里查看更多信息: TextBox样式和模板
自定义样式是否将OverridesDefaultStyle
属性设置为true
? 我相信这应该可以防止从默认样式中提取默认值。
如果是这样,并且这不起作用(或者你想使用自己的边框),我只能想到你需要使用Style
/中的Trigger覆盖适当属性更改事件的默认样式机制ControlTemplate
:
<Style x:Key="Triggers" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property = "BorderBrush" Value="{Binding ToYourBorder}"/>
</Trigger>
</Style.Triggers>
</Style>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.