Оболочка символов в Silverlight 4 TextBox - PullRequest
2 голосов
/ 04 ноября 2010

Я пишу бизнес-приложение Silverlight 4 и столкнулся с проблемой.Мне нужно, чтобы ввод текста в TextBoxes был принудительно установлен в UpperCase.На различных форумах я понимаю, что Silverlight не поддерживает CharacterCasing и CSS Styling.

Есть ли другой способ добиться этого?

Ответы [ 3 ]

10 голосов
/ 05 ноября 2010

Вы можете достичь этого, создав поведение, подобное этому:

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;
    }
}

Затем используйте его в вашем TextBox, например:

<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: - это пространство имен для

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

Код:

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

Для создания и использования поведений вам необходимо загрузить и установить Expression Blend SDK для Silverlight 4 и добавить ссылку на System.Windows.Interactivity.dll .

1 голос
/ 15 октября 2011

Попробуйте это:

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
    }

}
0 голосов
/ 15 октября 2011
    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

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