【问题标题】:WPF Change focused TextBox background colorWPF 更改焦点文本框背景颜色
【发布时间】:2018-04-14 21:25:45
【问题描述】:

注意:我正在使用 MahApps.Metro。

所以我想要创建一个影响应用程序中所有文本框的全局样式。样式应该在焦点上(无论是鼠标、键盘还是其他)改变焦点文本框的背景。

我的问题类似于 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——否则我会丢失所有预先配置的内容。

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

【问题讨论】:

    标签: c# wpf xaml textbox mahapps.metro


    【解决方案1】:

    其实,如果你只需要改变背景,那么你不需要创建模板。您可以使用简单的样式实现相同的结果。 这是标记:

     <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)。

    希望这会有所帮助。

    【讨论】:

    • 是的,这就是解决方案。这也是我最初的想法,但我想我第一次用 BasedOn 搞砸了。也非常感谢您提供的其他信息:)
    猜你喜欢
    • 2013-01-15
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多