2010-07-28 5 views
3

Je souhaite créer un style simple pour la zone de texte. Je veux conserver tout ce qui concerne l'aspect et la convivialité de la zone de texte standard sauf un élément.Style for Textbox Silverlight

OnFocus sur vous voulez pouvoir changer la couleur de la bordure de la zone de texte.

J'ai écrit ce qui suit et cela fonctionne. Cependant, tout est restylé, je dois déclarer la hauteur, l'apparence de la bordure non focalisée est également différente. Comment puis-je créer le modèle pour juste effectuer l'état 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> 
+0

Avez-vous essayé l'attribut BasedOn? – SirDemon

Répondre

2

Vous devez dupliquer le modèle entier de la zone de texte d'origine que vous pouvez trouver here. Ensuite, faites les changements dont vous avez besoin.

+1

C'est le seul moyen? Homme qui fait beaucoup de travail pour passer outre un état .... booo !!!! – Gabe

+0

@gmcalab: Oui, j'ai entendu cela souvent et je ressens la même chose mais un général "quelque chose de mieux" est difficile à imaginer. La plupart des «quelque chose de mieux» sont spécialisés en fonction des exigences actuelles d'un développeur individuel. – AnthonyWJones

0

Exemple de ce que SirDemon mentionné ...

Voici un style pour un TextBlock:

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

Disons que je voulais un autre style avec un FontSize de 20, mais la couleur de premier plan encore violet:

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

Edit: question Désolé, Relire. Vous voulez changer le modèle. Les propriétés du setter peuvent définir n'importe quelle propriété. Fait intéressant, le modèle est une propriété qui peut être définie dans le style. Cependant, autant que je sache, vous ne pouvez pas changer des parties individuelles du modèle.

Questions connexes