TextBox не работает по стилю - PullRequest
       39

TextBox не работает по стилю

0 голосов
/ 13 декабря 2011

Я использую следующий стиль на моем wpf TextBox.

 <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Background" Value="White" />
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="BorderBrush" Value="Gray"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Grid x:Name="Root">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.3">
                                    <VisualTransition.GeneratedEasingFunction>
                                        <QuarticEase EasingMode="EaseOut"/>
                                    </VisualTransition.GeneratedEasingFunction>
                                </VisualTransition>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <ColorAnimation Duration="0" To="DarkGray" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="Border" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled"/>
                            <VisualState x:Name="ReadOnly"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="FocusStates">
                            <VisualState x:Name="Focused">
                                <Storyboard>
                                    <ColorAnimation Duration="0" To="Black" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="Border" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Unfocused"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="ValidationStates">
                            <VisualState x:Name="Valid"/>
                            <VisualState x:Name="InvalidUnfocused"/>
                            <VisualState x:Name="InvalidFocused"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Border x:Name="Border" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" BorderBrush="Gray">
                        <ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False" VerticalContentAlignment="Center" Padding="5,0,0,0" VerticalAlignment="Center" Margin="0,0,22,0"/>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

При использовании этого стиля текстовое поле перестает работать. Если я нажимаю на текстовое поле, указатель мыши исчезает, фокус или текст не отображаются. Что не так с этим стилем?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Переименуйте вашу прокрутку, и она будет работать

<ScrollViewer x:Name="PART_ContentHost" BorderThickness="0" IsTabStop="False" VerticalContentAlignment="Center" Padding="5,0,0,0" VerticalAlignment="Center" Margin="0,0,22,0"/>

надеюсь, это поможет

0 голосов
/ 13 декабря 2011

Кажется, ваш Xaml не предоставил места для взаимодействия с клавиатурой / мышью.Я не совсем уверен, что вы пытаетесь создать, но если вы поместите TextBox в ScrollViewer, ваш шаблон перестанет отображать описанную вами «неисправность» ...

<Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="Gray" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1">
    <ScrollViewer x:Name="ContentElement" Margin="0,0,22,0" Padding="5,0,0,0" BorderThickness="0" IsTabStop="False" VerticalAlignment="Center" VerticalContentAlignment="Center">
        <TextBox />
    </ScrollViewer>
</Border>

Этот фрагмент кода показываетмодификация вашего Xaml, где ScrollViewer содержит TextBox.Событие MouseDown фокусируется на элементе управления, и взаимодействие с клавиатурой происходит, как ожидается.

...