更改文本时更改样式

时间:2011-05-23 16:02:37

标签: 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>

1 个答案:

答案 0 :(得分:2)

这是我将使用绑定的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>