2017-10-14 4 views
1

J'implémente une zone de liste, lorsque je sélectionne un élément dans la zone de liste, il apparaît sur un bloc de texte "MiniTextBlock", mais je veux quand le texte est modifié manuellement ou texte n'est pas égal à l'élément sélectionné dans la zone de liste, cet élément sélectionné doit être désélectionné dans la zone de liste. Tout semble correct, mais il est désélectionné même si le texte Textblock et l'élément sélectionné sont identiques.Élément sélectionné Toujours désélectionner (C#)

Codes échantillon complet

XAML

<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <TextBlock Name="MiniTextBlock" Text="35" FontSize="50" VerticalAlignment="Top" HorizontalAlignment="Center"/> 

     <ListBox Name="FavoritesListBox" VerticalAlignment="Center"> 
      <ListBoxItem> 
       <TextBlock Text="36" FontSize="30"/> 
      </ListBoxItem> 
      <ListBoxItem> 
       <TextBlock Text="35" FontSize="30"/> 
      </ListBoxItem> 
      <ListBoxItem> 
       <TextBlock Text="34" FontSize="30"/> 
      </ListBoxItem> 
     </ListBox> 
    </StackPanel> 

C#

public MainPage() 
{ 
    this.InitializeComponent(); 
    DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(0.4) }; 
    timer.Tick += delegate (object sender, object e) 
    { 
     var selectedItem = FavoritesListBox.SelectedItem; 

     if (selectedItem != null && selectedItem.ToString() != MiniTextBlock.Text) 
     { 
      FavoritesListBox.SelectedIndex = -1; 
     } 
    }; 
    timer.Start(); 
} 

DE SORTIE

Output

+0

Probablement le fait que vous avez défini l'indice, les résultats dans le fait que vous déclenchez à nouveau l'événement, et que 'SelectedItem' est maintenant' null '. –

+0

Je pense que lors de votre changement d'événement, la valeur ddl est effacée. Alternativement, vous pouvez vérifier cela avant votre condition. if (! string.IsNullorEmpty (FavoritesListBox.SelectedItem.ToString())) {if (FavoritesListBox.SelectedItem.ToString()! = MiniTextBLock.Text) { FavorisListBox.SelectedIndex = -1; }} – Deepak

+0

peut être possible parce que je l'insère dans DispatcherTimer donc il va vérifier si itemchanged dans le bloc de texte ou pas, comment puis-je traiter –

Répondre

2

Puisque vous n'êtes pas lier une source à votre ListBox, le SelectedItem est en fait un ListBoxItem, pas string . Vous aurez besoin de percer vers le bas et trouver le texte actuel comme celui-ci:

timer.Tick += delegate (object sender, object e) 
{ 
    var selectedItem = (ListBoxItem)FavoritesListBox.SelectedItem; 

    if (selectedItem == null) 
    { 
     return; 
    } 

    var tb = (TextBlock)selectedItem.Content; 

    if (tb.Text != MiniTextBlock.Text) 
    { 
     FavoritesListBox.SelectedIndex = -1; 
    } 
}; 
+0

In - var tb = (TextBlock) selectedItem.Content; , "Contenu" n'est pas disponible ou n'est pas valide –

+0

Nous avions besoin d'un cast pour 'ListBoxItem'. Code mis à jour. – Laith

+0

Wow! ça fonctionne maintenant, Merci YoU;) En fait, je vais l'utiliser dans la zone de liste qui contient un texte Textblock avec liaison de texte sous un modèle de données.Je fais au-dessus de l'échantillon fo simplement ma question laisse voir qu'il travaillera sur cela –

2

Je suppose que vous déclencher l'événement à nouveau en mettant SelectedIndex à -1, en raison SelectedItem est maintenant null. Quoi qu'il en soit, dans ce cas, une solution rapide est de garde la déclaration if avec une possible null:

var selectedItem = FavoritesListBox.SelectedItem; 

if(selectedItem != null && selectedItem.ToString() != MiniTextBLock.Text) 
{ 
    FavoritesListBox.SelectedIndex = -1; 
}
+0

cela fonctionne, mais désélectionner élément même si l'élément sélectionné et l'élément de bloc de texte sont les mêmes –

+0

@ArpitJain: êtes-vous sûr que les deux sont exactement les mêmes. Il vaut mieux lancer un débogueur et vérifier si ceux-ci sont * exactement * identiques. Les espaces blancs, les cas (supérieurs), etc. peuvent tous faire la différence. –

+0

exactement la même chose parce qu'auparavant cet élément ajouté à la zone de liste à partir de ce bloc de texte, et il n'y a aucun risque de majuscule et minuscule –