0

在我的 WPF 文本框中,当 IsEnabled=false 时,背景颜色为灰色。但此背景颜色尚未在任何地方设置。当我设置

  <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Background" Value="Blue"/>

它不起作用。当我在属性中更改 IsEnabled="true" 时,我可以更改背景颜色。谁能解释一下为什么后台 prorerty 不适用于 IsEnabled="False"

4

1 回答 1

1

实际上,您需要更新 TextBox 模板内的 Border 的背景。因此,您可以在触发器部分覆盖文本框的模板并在那里设置适当的背景。

您可以在此处找到所有默认的 TextBox 模板。

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBoxBase}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="MinWidth" Value="120"/>
    <Setter Property="MinHeight" Value="20"/>
    <Setter Property="AllowDrop" Value="true"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <Border 
        Name="Border"
        CornerRadius="2" 
        Padding="2"
        Background="{StaticResource WindowBackgroundBrush}"
        BorderBrush="{StaticResource SolidBorderBrush}"
        BorderThickness="1" >
                    <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="Blue"/>
                        <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBackgroundBrush}"/>
                        <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2012-06-22T12:17:38.827 回答