2009-09-26 9 views
2

Ce que je veux simplement que tous mes TextBoxes comme Configuré par défaut leur curseur à la fin du texte, donc je veux en pseudocode:Modifier la propriété à l'intérieur événement déclencheur

if (TextChanged) textbox.SelectionStart = textbox.Text.Length; 

Parce que je veux que tous les champs de saisie en mon application est affectée Je veux utiliser un style pour ça. Celui-ci ne fonctionne pas (pour des raisons évidentes), mais vous voyez l'idée:

<Style TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
    <EventTrigger RoutedEvent="TextChanged"> 
     <EventTrigger.Actions> 
     <Setter Property="SelectionStart" Value="{Binding Text.Length}"/> 
     </EventTrigger.Actions> 
    </EventTrigger> 
    </Style.Triggers> 
</Style> 

EDIT: Une chose importante est que la propriété SelectionStart ne doit être définie si la propriété du texte a été affecté par programme, pas lorsque le L'utilisateur modifie la zone de texte.

Répondre

3

Etes-vous sûr de vouloir ce comportement pour TOUTES les zones de texte de votre application? il sera presque impossible (ou au moins très douloureux) pour l'utilisateur de modifier le texte au milieu de la TextBox ...

De toute façon, il y a un moyen de faire ce que vous voulez ... En supposant que votre style est défini dans un fichier ResourceDictionary. Tout d'abord, vous devez créer un fichier code-behind pour le dictionnaire de ressources (par exemple, Dictionary1.xaml.cs). Ecrire le code suivant dans ce fichier:

using System.Windows.Controls; 
using System.Windows; 

namespace WpfApplication1 
{ 
    partial class Dictionary1 
    { 
     void TextBox_TextChanged(object sender, RoutedEventArgs e) 
     { 
      TextBox textBox = sender as TextBox; 
      if (textBox != null) 
       textBox.SelectionStart = textBox.Text.Length; 
     } 
    } 
} 

Dans le XAML, ajoutez l'attribut x: classe à l'élément ResourceDictionary:

<ResourceDictionary x:Class="WpfApplication1.Dictionary1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

Définir votre style comme suit:

<Style TargetType="{x:Type TextBox}"> 
    <EventSetter Event="TextChanged" Handler="TextBox_TextChanged" /> 
</Style> 

La méthode TextBox_TextChanged va maintenant gérer l'événement TextChanged de toutes les zones de texte.

Il devrait être possible d'écrire la ligne de code dans le XAML en utilisant l'attribut x: Code, mais je ne pouvais pas le faire fonctionner ...

+0

Oh putain ... Je n'ai pas pensé à ça. J'ai vraiment besoin que le SelectionStart ne soit activé que si le texte change par programme, par ex. si la propriété Text est affectée à mais ne doit pas être modifiée par l'utilisateur. – codymanix

+0

Je n'avais aucune idée que vous pourriez faire ce genre de chose - génial. –

1

Créer un attached behaviour. Les comportements attachés sont un moyen d'accrocher la gestion arbitraire des événements de manière à ce qu'ils puissent être appliqués via un Style.

Questions connexes