2010-04-15 4 views

Répondre

3

Voici comment je l'ai fait. Créez une classe dérivée et remplacez OnPreviewTextInput. Définissez votre collection sur la propriété ItemsSource du contrôle et cela devrait fonctionner correctement.

public class CurrencySelectorTextBox : AutoCompleteBox 
{  
    protected override void OnPreviewTextInput(TextCompositionEventArgs e) 
    {    
     var currencies = this.ItemsSource as IEnumerable<string>; 
     if (currencies == null) 
     { 
      return; 
     } 

     if (!currencies.Any(x => x.StartsWith(this.Text + e.Text, true, CultureInfo.CurrentCulture)) 
     { 
      e.Handled = true; 
     } 
     else 
     { 
      base.OnPreviewTextInput(e); 
     }    
    } 
} 
1

Vous pouvez restreindre l'utilisateur à l'aide de l'événement de clé Priview. J'espère que cela fonctionnera ...

1

Si vous Databinding à une propriété, comme celui-ci pour un exemple

<sdk:AutoCompleteBox ItemsSource="{Binding Sites, Source={StaticResource VmSchedulel}}" ValueMemberPath="SiteName" 
              SelectedItem="{Binding Site, Mode=TwoWay}" FilterMode="ContainsOrdinal"> 
          <sdk:AutoCompleteBox.ItemTemplate> 
           <DataTemplate> 
            <TextBlock Text="{Binding SiteName}"/> 
           </DataTemplate> 
          </sdk:AutoCompleteBox.ItemTemplate> 
         </sdk:AutoCompleteBox> 

Si un texte est saisi qui ne correspond pas à quoi que ce soit dans le ItemsSource, le SelectedItem sera égal à null . Dans la méthode set de votre propriété, vous pouvez simplement ne pas définir la valeur car elle est null et la propriété conservera sa valeur d'origine.

set 
     { 
      if (value != null) 
      { 
       BaseRecord.SiteID = value.ID; 
       PropChanged("Site"); 
      } 
     } 
Questions connexes