WP8 Mettez en surbrillance SELECTEYITEM Longlistselector
-
26-12-2019 - |
Question
Mon inquiétude est de mettre en évidence un élément sélectionné dans mon élément longlister lorsque l'utilisateur tourne dessus.
J'ai essayé cette solution: http:// code .msdn.microsoft.com / WindowsApps / Highlight-A-sélectionnée-30ED444 # Contenu
Mais j'ai toujours un problème. de
Dans mon projet, le Longlistselector est rempli de 90 ~ 100 articles et si je tapote sur l'élément X TH , le (x + 20) th , le (x + 40) TH , le (x + 60) th , le (x + 80) th ... être mis en surbrillance. Comment est-ce possible? Qu'est-ce qui cause cela?
J'ai essayé de déboguer et ce que j'ai remarqué, c'est que "l'usercontrollist" (voir le gestionnaire d'événements myLonglsElector1_Sélectionné en suivant le lien ci-dessus) comporte 20 éléments après l'exécution de "getItemSrecursive", et non de 90 ~ 100 comme i, au moins, attendue.
Si vous ne pouvez pas résoudre cela, alors quelqu'un sait-il comment mettre en évidence les éléments sélectionnés dans Longlistselector? (Utilisation de la liste de liste n'est pas une option)
La solution
Que diriez-vous de vous écrire un meilleur qui est beaucoup plus facile à comprendre?De plus, vous pouvez avoir une combinaison de couleurs de surbrillance?J'utilise cela pour quelques-unes de mes applications.Tout ce qu'il fait, c'est qu'il lie également la couleur de fond à la classe.S'il est choisi, il renvoie la couleur de surbrillance de la classe si elle ne renvoie pas la couleur non en surbrillance.
exemple de point de données - comme vous pouvez le constater, vous pouvez définir une couleur de surbrillance et une couleur de surbrillance sans surbrillance
public class sample_data : INotifyPropertyChanged
{
// Create the OnPropertyChanged method to raise the event
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public sample_data(string name)
{
this.Name = name;
this.IsSelected = false;
this.NonHighlightColor = new SolidColorBrush(Colors.Transparent);
this.HighLightColor = new SolidColorBrush(Colors.Red);
}
public string Name { get; set; }
private bool _is_selected;
public bool IsSelected
{
get { return _is_selected; }
set
{
_is_selected = value;
OnPropertyChanged("HighlightBackgroundColor");
}
}
public SolidColorBrush HighlightBackgroundColor
{
get { if (IsSelected) return HighLightColor; else return NonHighlightColor; }
}
private SolidColorBrush HighLightColor{ get; set; }
private SolidColorBrush NonHighlightColor { get; set; }
}
permet de créer l'observablecollection et de définir l'itemSource de Longlistselector.
private ObservableCollection<sample_data> CreateSampleData()
{
ObservableCollection<sample_data> sd = new ObservableCollection<sample_data>();
sd.Add(new sample_data("Bob"));
sd.Add(new sample_data("Dan"));
sd.Add(new sample_data("Kate"));
sd.Add(new sample_data("Bart"));
sd.Add(new sample_data("Sanders"));
sd.Add(new sample_data("Dog"));
return sd;
}
// Constructor
public MainPage()
{
InitializeComponent();
mylonglist.ItemsSource = CreateSampleData();
}
maintenant pour le xaml
<phone:LongListSelector x:Name="mylonglist" SelectionChanged="mylonglist_SelectionChanged">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Background="{Binding HighlightBackgroundColor}" Height="100">
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
code pour le changement de sélection
private void mylonglist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
LongListSelector ls = sender as LongListSelector;
sample_data selected_item = ls.SelectedItem as sample_data;
// unselected the previous selections
foreach (sample_data sd in ls.ItemsSource)
{
if (sd != selected_item)
{
sd.IsSelected = false;
}
}
// set the selected item (this will cause the background color to change)
selected_item.IsSelected = true;
}
catch (Exception ex)
{
string error = ex.Message;
}
}
Voilà, vous l'avez maintenant, vous pouvez maintenant mettre en évidence toutes les couleurs et avec des couleurs personnalisées pour chaque article sans messager avec le gestionnaire de VisualState Messy.