使用 OutlinedTextBox 样式时如何更改标签背景?

How to change the label background when using the OutlinedTextBox style?

我在使用 TextBox 轮廓样式时遇到了一个问题。我设法更改了 App.xaml 中的字体颜色,但我不知道如何在单击 TextBox 时更改文本背景。你知道该怎么办吗?

<TextBox  x:Name="txt_Username" 
          materialDesign:HintAssist.Hint="Enter username"
          Background="{x:Null}"
          Height="70"
          Width="300"
          FontFamily="Tolkien"
          BorderThickness="2"
          BorderBrush="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"
          Style="{DynamicResource MaterialDesignOutlinedTextBox}"
          FontSize="22"
          Foreground="#FFEBE2E2" 
          Margin="0,-58,0,221" CaretBrush="{x:Null}" SelectionBrush="{x:Null}"
          />

如果要在non-floating浮动状态下都设置提示背景,请使用提示辅助。

materialDesign:HintAssist.Background="Red"

为non-floating和浮动状态设置不同的背景是比较困难的。不幸的是,MaterialDesign 确实公开了一个 属性 来检测提示当前是否浮动。它仅在 TextBox 的 控件模板中的 SmartHint 元素 上可用。因此,您不能简单地从外部访问它并使用样式触发器来更改背景颜色。

如果你想要一个确定的解决方案,你必须从 GitHub here 中复制默认样式(多个,因为概述的样式是基于其他样式的)并适应你的版本 MaterialDesignTextBoxBase.

  • 浮动样式的触发器是MultiTrigger in line 360

  • 判断内部的条件floating state is in line 364.

    <Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
    
  • 适配第367行,设置要申请浮动状态的笔刷

    <Setter Property="wpf:HintAssist.Background" Value="Red" />
    

其他派生样式一直到MaterialDesignOutlinedTextBox都不需要改编,但还是要复制过来覆盖,否则会以原来的基础样式为基础。


目前有一个简单的解决方法。浮动状态的画笔设置为 MaterialDesignPaper 画笔,仅在这种情况下使用,因此在本地覆盖它会更改背景颜色,但前提是您没有使用提示辅助设置背景。它将优先。

<TextBox x:Name="txt_Username" 
         ...>
   <TextBox.Resources>
      <SolidColorBrush x:Key="MaterialDesignPaper" Color="Red"/>
   </TextBox.Resources>
</TextBox>

请注意,将来可能会更改实施并破坏此解决方法。