wpf - 更改文本时更改样式

标签 wpf user-controls fonts

无法弄清楚如何在更改文本时让文本更改样式。我已将其设置为在我键入时样式会发生变化,并且默认设置为灰色以指示该字段中需要输入的内容。我希望文本从默认文本更改为黑色且字体粗细正常,并保持这种状态。

这是我当前的触发器样式

<Style TargetType="{x:Type TextBox}">
        <Setter Property="Foreground" Value="DimGray" />
        <Setter Property="FontSize" Value="15" />
        <Setter Property="FontStyle" Value="Italic" />
        <Setter Property="Padding" Value="5,4,0,4" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBoxBase}">
                    <Border
        x:Name="Bd" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}"
        CornerRadius="7"
        >
                        <Border.Background>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="2,1">
                                <GradientStop Color="{Binding Path=GradientColorStart}" Offset="0"/>
                                <GradientStop Color="{Binding Path=GradientColorEnd}" Offset="1"/>
                                <!-- 
                                <GradientStop Color="#CCCCCC" Offset="0"/>
                                <GradientStop Color="#FFFFFF" Offset="1"/>
                                -->
                            </LinearGradientBrush>
                        </Border.Background>
                        <ScrollViewer x:Name="PART_ContentHost"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter 
                Property="Background" 
                TargetName="Bd"
                Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
                />
                            <Setter Property="Foreground" Value="Green"/>
                        </Trigger>
                        <Trigger Property="Width" Value="Auto">
                            <Setter Property="MinWidth" Value="100"/>
                        </Trigger>
                        <Trigger Property="Height" Value="Auto">
                            <Setter Property="MinHeight" Value="20"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Foreground" Value="Black" />
                <Setter Property="FontWeight" Value="Bold" />
                <Setter Property="FontStyle" Value="Normal" />
                <Setter Property="Text" Value="" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="#00112d" />
                <Setter Property="FontWeight" Value="Normal" />
                <Setter Property="FontStyle" Value="Normal" />
            </Trigger>
        </Style.Triggers>
    </Style>

最佳答案

这是我会用绑定(bind)的 TargetNullValue 来处理的事情,字符串当然首先必须为 null,所以这可能不是您的选择:

<TextBox Text="{Binding TestString, TargetNullValue=Enter Text Here, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding TestString}" Value="{x:Null}">
                    <Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

关于wpf - 更改文本时更改样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6099804/

相关文章:

c# - WPF:DataGrid 查找和替换

c# - MVVM OnPropertyChanged 在使用赋值运算符时不改变 View (PropertyChanged 变为空)

asp.net - 用户控件句柄上的 NullReferenceException

html - 在不使用@media 查询的情况下使用屏幕分辨率调整字体大小

html - 如何使用CSS在一段中添加多种字体?

html - 在带有 Noscript 的 Firefox 中对 html/css 字体使用 @import(Google 字体不呈现)?

.net - 如何在 WPF 应用程序中查找内存泄漏

c# - 无法从 Win7 x64 上的 32 位进程启动屏幕键盘 (osk.exe)

c# - 阻止 VS 将属性值放入 .Designer.cs 文件

c# - 无法在 MVVM 中完成模式中介