我担心的是突出显示LongListSelector中的选定项目 当用户点击它时。
我尝试了这个解决方案:http://code.msdn.microsoft.com/windowsapps/Highlight-a-selected-item-30ced444#content
但我还是有问题。
在我的项目中,LongListSelector填充了90~100个项目,如果我点击x th 元素,则(x + 20) th ,(x + 40) th ,(x + 60) th ,(x + 80) th ...也被突出显示。怎么可能?是什么导致这个?
我试着调试,我注意到的是" userControlList" (通过上面的链接看到MyLongListSelector1_SelectionChanged事件处理程序)在执行" GetItemsRecursive"之后有20个元素,而不是90~100作为i,至少是预期的。
如果你无法解决这个问题,那么有谁知道如何在LongListSelector中实际突出显示所选项? (使用列表框不是一个选项)
答案 0 :(得分:7)
我们如何为您写一个更容易理解的更好的?另外,你可以有任何高亮颜色的组合?我将它用于我的一些应用程序。它所做的只是将背景颜色绑定到类。如果选中它,则返回类的高亮颜色,否则返回非高亮颜色。
示例数据点 - 如您所见,您可以设置高亮颜色和无高亮颜色
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<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();
}
现在是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>
选择更改的代码
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管理器。