Стиль для текстового поля Silverlight - PullRequest
3 голосов
/ 28 июля 2010

Я хочу сделать простой стиль для текстового поля.Я хочу сохранить все, что касается стандартного оформления текстового поля, за исключением одного элемента.

OnFocus on хочет иметь возможность изменять цвет границы текстового поля.

Я написал следующее, и этоработает.Тем не менее, все рестайлинг, я должен объявить высоту, внешний вид и не сфокусированная граница также отличается.Как я могу создать шаблон, чтобы просто влиять только на состояние onfocus.

 <Style x:Key="TextBoxStyle" TargetType="TextBox">

            <Setter Property="BorderBrush" Value="Gold" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBox">
                        <Grid Height="{TemplateBinding Height}"

                             >
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="MouseOver" />
                                    <VisualState x:Name="Pressed" />
                                    <VisualState x:Name="Disabled" />
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused">
                                        <Storyboard>
                                            <ColorAnimation Storyboard.TargetName="brd" 
                                                            Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
                                                            Duration="0" 
                                                            To="Red" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Unfocused"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="brd" 
                                    BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" 
                                    Background="{TemplateBinding Background}"
                                    CornerRadius="2">
                                <ContentPresenter x:Name="contentPresenter" />
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Вам необходимо продублировать весь шаблон исходного текстового поля, которое вы можете найти здесь Затем внесите необходимые изменения.

0 голосов
/ 28 июля 2010

Пример того, что упомянул SirDemon ...

Вот стиль для текстового блока:

<Style
    x:Key="detailBlk"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
    <Setter
        Property="Foreground"
        Value="Purple" />
</Style>

Допустим, я хотел другой стиль с FontSize 20, но цвет переднего планавсе еще фиолетовый:

<Style
    x:Key="detailBlk20"
    TargetType="TextBlock"
    BasedOn="{StaticResource detailBlk}">
    <Setter
        Property="FontSize"
        Value="20" />
</Style>

Редактировать: Извините, перечитайте вопрос.Вы хотите изменить шаблон.Свойства сеттера могут устанавливать любое свойство.Интересно, что шаблон является свойством, поэтому его можно задать в стиле.Однако, насколько я знаю, вы не можете изменить отдельные части шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...