我在Expression Blend中创造了一种定制TextBox
的。我已经改变了背景和边框渐变的填充,并增加了在阴影效果。
我注意到,当我鼠标悬停或聚焦我TextBox
,WPF的一些默认行为/(风格?)接管和我的边界被改变。
我在想,如果有无论如何要阻止或改变我的风格TextBox
es当我专注或鼠标悬停它停止WPF。这可能吗?
请问您的自定义样式设置OverridesDefaultStyle
属性true
?我相信这应该防止默认的样式正在绘制的默认值。
如果是这样,这是不工作(或您希望使用自己的边界),所有我能想到的是,你将需要覆盖默认样式机制,为相应的属性在Trigger使用Style
改变/时ControlTemplate
:
<Style x:Key="Triggers" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property = "BorderBrush" Value="{Binding ToYourBorder}"/>
</Trigger>
</Style.Triggers>
</Style>
将简单的解决方案正好被设置文本框边框的厚度为0,然后再包文本框自己的边界:
<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 Styles and Templates