2010-11-04 4 views
2

J'écris une application commerciale Silverlight 4 et j'ai rencontré un problème. J'ai besoin de l'entrée de texte dans TextBoxes pour être forcé à UpperCase. Ce que je comprends de différents forums est que Silverlight n'implémente pas CharacterCasing et CSS Styling.Boîtier de caractères dans Silverlight 4 TextBox

Existe-t-il un autre moyen d'y parvenir?

Répondre

10

Vous pouvez y parvenir en créant un comportement, comme celui-ci:

public class UpperCaseAction : TriggerAction<TextBox> 
{ 

    protected override void Invoke(object parameter) 
    { 
     var selectionStart = AssociatedObject.SelectionStart; 
     var selectionLenght = AssociatedObject.SelectionLength; 
     AssociatedObject.Text = AssociatedObject.Text.ToUpper(); 
     AssociatedObject.SelectionStart = selectionStart; 
     AssociatedObject.SelectionLength = selectionLenght; 
    } 
} 

Ensuite, utilisez dans votre zone de texte, comme ceci:

<Grid x:Name="LayoutRoot" Background="White"> 
    <TextBox TextWrapping="Wrap" VerticalAlignment="Top" Margin="10"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="TextChanged"> 
       <ASD_Answer009_Behaviors:UpperCaseAction/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </TextBox> 
</Grid> 

i: est un espace de noms pour

clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity

Code derrière:

System.Windows.Interactivity.EventTrigger eventTrigger = new System.Windows.Interactivity.EventTrigger("TextChanged"); 
eventTrigger.Actions.Add(new UpperCaseAction()); 
System.Windows.Interactivity.Interaction.GetTriggers(myTextBox).Add(eventTrigger); 

Afin de créer et d'utiliser les comportements, vous devez télécharger et installer le Expression Blend SDK for Silverlight 4 et ajouter une référence à System.Windows.Interactivity.dll.

+0

Merci. Cela fonctionne magnifiquement – VRamesh

0
private void txt2_KeyDown(object sender, KeyEventArgs e) 
    { 

     if (Keyboard.Modifiers != ModifierKeys.None) return; //do not handle ModifierKeys (work for shift key) 

     string n = new string(new char[] { (char)e.PlatformKeyCode }); 
     int nSelStart = txt2.SelectionStart; 

     txt2.Text = txt2.Text.Remove(nSelStart, txt2.SelectionLength); //remove character from the start to end selection 
     txt2.Text = txt2.Text.Insert(nSelStart, n); //insert value n 
     txt2.Select(nSelStart + 1, 0); //for cursortext 

     e.Handled = true; //stop to write in txt2 

    } 
1

Essayez ceci:

private void txt2_KeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = MakeUpperCase((TextBox)sender, e); 
} 

bool MakeUpperCase(TextBox txt, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers != ModifierKeys.None || (e.Key < Key.A) || (e.Key > Key.Z)) //do not handle ModifierKeys (work for shift key) 
    { 
     return false; 
    } 
    else 
    { 
     string n = new string(new char[] { (char)e.PlatformKeyCode }); 
     int nSelStart = txt.SelectionStart; 

     txt.Text = txt.Text.Remove(nSelStart, txt.SelectionLength); //remove character from the start to end selection 
     txt.Text = txt.Text.Insert(nSelStart, n); //insert value n 
     txt.Select(nSelStart + 1, 0); //for cursortext 

     return true; //stop to write in txt2 
    } 

}