Comment puis-je capturer un onglet entré dans une boîte aux lettres Silverlight et rendre 4 espaces (ou un onglet) à sa place?Capture d'un onglet dans Silverlight TextBox
Je n'arrive pas à comprendre comment bloquer la navigation par tabulation.
Comment puis-je capturer un onglet entré dans une boîte aux lettres Silverlight et rendre 4 espaces (ou un onglet) à sa place?Capture d'un onglet dans Silverlight TextBox
Je n'arrive pas à comprendre comment bloquer la navigation par tabulation.
Son e est ce que je fais (similaire à Johannes de code):
private const string Tab = " ";
void textBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
int selectionStart = textBox.SelectionStart;
textBox.Text = String.Format("{0}{1}{2}",
textBox.Text.Substring(0, textBox.SelectionStart),
Tab,
textBox.Text.Substring(textBox.SelectionStart + textBox.SelectionLength, (textBox.Text.Length) - (textBox.SelectionStart + textBox.SelectionLength))
);
e.Handled = true;
textBox.SelectionStart = selectionStart + Tab.Length;
}
}
Ce se comporte exactement comment vous vous attendez même si vous sélectionnez un texte et cliquez sur le ol touche « Tab ». Une autre chose: j'ai essayé d'avoir la chaîne de tabulation comme "\ t", mais en vain. L'onglet restitué, mais était la largeur d'un seul espace - d'où la valeur de la const const est quatre espaces.
Je ne sais pas comment résoudre votre problème, j'ai piraté une solution qui semble fonctionner.
Définissez l'événement KeyDown comme ci-dessous.
expenses.KeyDown += new KeyEventHandler(expenses_KeyDown);
Dans ce cas, je mets le code suivant:
void expenses_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
expenses.Text += " ";
expenses.Focus();
expenses.LostFocus += new RoutedEventHandler(expenses_LostFocus);
}
}
Et puis dans LostFocus:
void expenses_LostFocus(object sender, RoutedEventArgs e)
{
expenses.Focus();
expenses.Select(expenses.Text.Length - 1, 0);
}
La dernière ligne LostFocus définit le curseur d'édition à la fin du texte , sinon, quand il obtient le focus, la position du curseur est au début de la zone de texte
Cela semble bien fonctionner pour moi, et ne nécessite pas le second gestionnaire d'événements ou codage en dur de la zone de texte Nom:
void TabbableTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
e.Handled = true;
var tb = ((TextBox)sender);
tb.Text += "\t";
tb.Select(tb.Text.Length, 0);
}
}
Est-ce que le contrôle TextBox dans Silverlight ont une propriété « AcceptsTab »? Vous devez définir cela sur True pour que la touche de tabulation soit traitée par TextBox. –
non, je ne vois pas cette propriété dans Intellisense ou dans Expression Blend –