WPF更改焦点TextBox背景颜色

时间:2017-11-02 11:11:02

标签: c# wpf xaml textbox mahapps.metro

注意:我使用的是MahApps.Metro。

所以我想要的是创建一个影响应用程序中所有TextBox的全局样式。样式应该在焦点上(无论是鼠标,键盘等)都会改变焦点TextBox的背景。

我的问题类似于 Change the focused border color of a Wpf textbox when it GotFocus()

我仍然习惯使用样式和模板。这是他们使用的代码。

    <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,我必须扩展基本TextBox - 否则我会丢失所有预先配置的内容。

我还注意到使用上面的模板将我的指针向上移动了一点,并且它也缩短了它的高度。它可能也会覆盖指针设置吗?

1 个答案:

答案 0 :(得分:3)

实际上,如果您只需要更改背景,则无需创建模板。您可以通过简单的风格获得相同的结果。 这是标记:

 <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样式 - {{3 }})。

希望这会有所帮助。