[英]Why my implicit ContextMenu Style doesn't override the TextBox context menu style?
[英]Why doesn't my Textbox react on IsMouseOver in the Style for the ControlTemplate
因此,我尝试对TextBox进行一些样式设置,其想法是,我想在将鼠标悬停在TextBox上时对BorderBrush进行样式设置,但由于某种原因它没有更改边框,因此我也尝试更改了Background, 。 那时我意识到它对IsMouseOver
没有反应,但确实设置了背景以及我所做的所有其他事情,只是事件IsMouseOver
没有反应。
控制
<TextBox Width="700"
Height="340"
HorizontalAlignment="Right"
Margin="0,0,230,140"
Foreground="#8bf502"
TextWrapping="Wrap"
Style="{DynamicResource TextboxStyle}"/>
样式
<Style TargetType="{x:Type TextBox}" x:Key="TextboxStyle">
<Setter Property="OverridesDefaultStyle" Value="True"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="#424242">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Orange"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
要更改边框的背景,请给边框命名,然后将SetName =“ MyBorder”添加到设置器中
您缺少TargetName
和BorderThickness
:
<Style TargetType="{x:Type TextBox}" x:Key="TextboxStyle">
<Setter Property="OverridesDefaultStyle" Value="True"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Name="border" BorderThickness="2" Background="#424242">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Orange"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
没有Border
除非您将其BorderThickness
属性设置为0
以外的0
。
您使用的是自定义Template
,但是您的模板未应用模板化TextBox
的border属性。 尝试将以下内容添加到模板的Border
元素中:
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
实际上,您可以通过几种方法进行处理:使用模板绑定并将触发器放入Style
; 使用模板绑定并将触发器放入模板中; 使用明确的目标元素,并将触发器放入模板(如此处其他建议); 等。“正确”方法取决于更改属性时控件如何/是否希望响应。 例如:如果有人直接在TextBox
上设置了新的BorderBrush
,您是否希望它取代您的橙色悬停效果? 值得阅读依赖属性的值优先级 ,以了解如何以及在何处设置某些属性的含义。
值得注意的是,如果您希望文本是可编辑的(或可选的),则您的模板是不完整的,将无法使用。 TextBox
希望其模板具有一个专门命名的ScrollViewer
,可以在其中插入可编辑的文本视图。 尝试将您的ContentPresenter
替换为以下内容:
<ScrollViewer x:Name="PART_ContentHost"
Padding="{TemplateBinding Padding}" />
请注意, x:Name
属性必须完全匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.