gpt4 book ai didi

c# - WP8高亮SelectedItem LongListSelector

转载 作者:行者123 更新时间:2023-11-30 19:59:04 26 4
gpt4 key购买 nike

我关心的是突出显示我的 LongListSelector 中的选定项目当用户点击它时。

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

但是我还有一个问题。
在我的项目中,LongListSelector 充满了 90~100 个项目,如果我点击第 xth 元素,则 (x+20)th,(x+ 40)th、(x+60)th、(x+80)th... 也突出显示。这怎么可能?这是什么原因造成的?

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

如果你不能解决这个问题,那么有谁知道如何在 LongListSelector 中实际突出显示选定的项目? (不能选择使用列表框)

最佳答案

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


示例数据点 - 如您所见,您可以设置高亮颜色和非高亮颜色

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 Manager。

enter image description here

关于c# - WP8高亮SelectedItem LongListSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com