WPF 更改聚焦的文本框背景颜色
WPF Change focused TextBox background color
注意:我使用的是MahApps.Metro。
所以我想要的是创建一个影响应用程序中所有文本框的全局样式。 Style should on Focus(无论是鼠标、键盘还是其他)更改焦点文本框的背景。
我的问题类似于
我仍然不喜欢样式和模板。这是他们使用的代码。
<Style
BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border
x:Name="border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ScrollViewer
x:Name="PART_ContentHost"
Focusable="false"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="border" Property="Opacity" Value="0.56" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="BorderBrush" Value="#FF7EB4EA" />
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Setter TargetName="border" Property="BorderBrush" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如何编写一个与此相似的控件模板来更改背景而不是边框?
由于我使用的是 Metro,因此我必须扩展基本文本框 - 否则我会丢失所有预先配置的内容。
我还注意到使用上面的模板将我的指针向上移动了一点,并且还缩短了它的高度。它可能也覆盖了指针设置?
其实,如果你只需要改变背景,那么你不需要创建模板。您可以使用简单的样式获得相同的结果。
这是标记:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
BasedOn="{StaticResource MetroTextBox}"
这部分表示我们正在扩展Mahapps的TextBox样式(您可以通过查看代码找到要扩展的控件的资源名称,例如这里是他们的TextBox样式 - https://github.com/MahApps/MahApps.Metro/blob/c26b33d114aec64d98afd4f729b28838583d8ed9/src/MahApps.Metro/MahApps.Metro/Styles/Controls.TextBox.xaml#L12).
希望这会有所帮助。
注意:我使用的是MahApps.Metro。
所以我想要的是创建一个影响应用程序中所有文本框的全局样式。 Style should on Focus(无论是鼠标、键盘还是其他)更改焦点文本框的背景。
我的问题类似于
我仍然不喜欢样式和模板。这是他们使用的代码。
<Style
BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border
x:Name="border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ScrollViewer
x:Name="PART_ContentHost"
Focusable="false"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="border" Property="Opacity" Value="0.56" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="BorderBrush" Value="#FF7EB4EA" />
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Setter TargetName="border" Property="BorderBrush" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如何编写一个与此相似的控件模板来更改背景而不是边框? 由于我使用的是 Metro,因此我必须扩展基本文本框 - 否则我会丢失所有预先配置的内容。
我还注意到使用上面的模板将我的指针向上移动了一点,并且还缩短了它的高度。它可能也覆盖了指针设置?
其实,如果你只需要改变背景,那么你不需要创建模板。您可以使用简单的样式获得相同的结果。 这是标记:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
BasedOn="{StaticResource MetroTextBox}"
这部分表示我们正在扩展Mahapps的TextBox样式(您可以通过查看代码找到要扩展的控件的资源名称,例如这里是他们的TextBox样式 - https://github.com/MahApps/MahApps.Metro/blob/c26b33d114aec64d98afd4f729b28838583d8ed9/src/MahApps.Metro/MahApps.Metro/Styles/Controls.TextBox.xaml#L12).
希望这会有所帮助。