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)

Était-ce utile?

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.

Entrez la description de l'image ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top