WP8突出显示SelectedItem LongListSelector

我担心的是当用户点击它时,在我的LongListSelector中突出显示一个选定的项目。

我试过这个解决方案: http : //code.msdn.microsoft.com/windowsapps/Highlight-a-selected-item-30ced444#content

但我还是有问题。
在我的项目中,LongListSelector被填充了90~100项,如果我点击第x 元素,第(x + 20) th ,第(x + 40) th ,第(x + 60) th ,( x + 80) th …也被突出显示。 怎么可能? 是什么导致了这个?

我试着调试,我注意到“userControlList”(通过上面的链接看到MyLongListSelector1_SelectionChanged事件处理程序)在执行“GetItemsRecursive”后有20个元素,而不是90~100,因为我至少是预期的。

如果你无法解决这个问题,那么有谁知道如何在LongListSelector中实际突出显示所选项目? (使用Listbox而不是一个选项)

我们怎么样给你写一个更容易理解的更好的? 另外,你可以有任何高亮颜色的组合? 我将这个用于我的一些应用程序。 它所做的只是将背景颜色绑定到类。 如果选中它,则返回类的高亮颜色,否则返回非高亮颜色。


样本数据点 – 如您所见,您可以设置高亮颜色和无高亮颜色

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; } } 

让我们创建ObservableCollection并设置LongListSelector的ItemSource。

  private ObservableCollection CreateSampleData() { ObservableCollection sd = new ObservableCollection(); 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(); } 

现在为XAML

           

选择变更代码

  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; } } 

你有它,现在你可以突出显示任何颜色和每个项目的自定义颜色,而不会弄乱凌乱的VisualState管理器。

在此处输入图像描述