简体   繁体   中英

TextBox , different ControlTemplate + IsEnabled

I have added a style to a textbox , where in I modify the ControlTemplate of the textBox . I end up having a different control template for the textbox . But I have a problem. When I set the IsEnabled property to false, the normal textbox, is just greyed out. But the one with different control template, still remains white .

Is there something specific I need to add as a part of control template , in order to obtain the default behavior?

thanks Sandeep

Update -> Added the control template.

<ControlTemplate TargetType="{x:Type commonControls:DerivedTextBox}">
                <Border Name="Border"
                    CornerRadius="2"
                    Padding="2"
                    BorderThickness="1">
                    <Border.Background>
                        <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
                    </Border.Background>
                    <Border.BorderBrush>
                        <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
                    </Border.BorderBrush>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                            Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                        <EasingColorKeyFrame KeyTime="0"
                                     Value="{DynamicResource ControlLightColor}" />
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="ReadOnly">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                            Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)">
                                        <EasingColorKeyFrame KeyTime="0"
                                     Value="{StaticResource DisabledControlDarkColor}" />
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="MouseOver" />
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ScrollViewer Margin="0"
                    x:Name="PART_ContentHost" />
                </Border>
            </ControlTemplate>

You have replaced the default XAML that makes the TextBox 'grayed out' when IsEnabled is set to False . If you want to replace this functionaluity, you will need to copy that part of the original ControlTemplate , which you can find at the TextBox Styles and Templates page on MSDN.

In the default ControlTemplate , you will see a VisualState with the name Disabled ... that is what you need, but you may as well copy most of the VisualState s from there.

<VisualState x:Name="Disabled">
    <Storyboard>
        <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
            Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
            <EasingColorKeyFrame KeyTime="0"
                Value="{StaticResource DisabledControlLightColor}" />
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM