C# 如何制作一些ListView项目';灰显';不可选择?
ListView控件中的某些项是可选择的,并且具有普通文本。 但是,有些项目虽然作为项目包含在ListView中,但将不可选择/不可查找并“灰显” 在Windows应用商店应用程序中,我们可以在列表视图中选择单个/多个/无项目。但是,在代码中,如何使某些索引中的某些项不可选择/不可查找并“灰显” 我设法在某个索引处访问ListView的项:C# 如何制作一些ListView项目';灰显';不可选择?,c#,windows-store-apps,winrt-xaml,windows-8.1-universal,C#,Windows Store Apps,Winrt Xaml,Windows 8.1 Universal,ListView控件中的某些项是可选择的,并且具有普通文本。 但是,有些项目虽然作为项目包含在ListView中,但将不可选择/不可查找并“灰显” 在Windows应用商店应用程序中,我们可以在列表视图中选择单个/多个/无项目。但是,在代码中,如何使某些索引中的某些项不可选择/不可查找并“灰显” 我设法在某个索引处访问ListView的项: myListView.ItemContainerGenerator.ContainerFromIndex(i) 但我找不到任何选项来自定义其选定的事件处理
myListView.ItemContainerGenerator.ContainerFromIndex(i)
但我找不到任何选项来自定义其选定的事件处理程序。
你知道怎么做到吗 在单一选择模式下。 首先向绑定类型的类添加一个布尔属性,该类定义如下所示的可单击项
class TestClass
{
Boolean IsClickAllowed{get;set;}
string name{get;set;}
}
var TempList=new List<>()
{
new TextClass(){IsClickAllowed=false,name="First Item"},
new TextClass(){IsClickAllowed=true,name="Second Item"},
new TextClass(){IsClickAllowed=false,name="Third Item"},
};
MyList.ItemsSource=TempList;
然后创建TestClass类型的源列表,并将其设置为Listview的itemssource,如下所示
class TestClass
{
Boolean IsClickAllowed{get;set;}
string name{get;set;}
}
var TempList=new List<>()
{
new TextClass(){IsClickAllowed=false,name="First Item"},
new TextClass(){IsClickAllowed=true,name="Second Item"},
new TextClass(){IsClickAllowed=false,name="Third Item"},
};
MyList.ItemsSource=TempList;
希望有帮助。我找到了一个解决方案: 我已经重写了
ListView
控件并创建了一个StripedListView。然后,通过覆盖PrepareContainerForItemOverride
,该控件负责在创建ListViewItem
控件后设置该控件,您可以修改背景色并将ItemListView设置为false。isEnabled
选项为false:
public class StripedListView : ListView
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var listViewItem = element as ListViewItem;
if (listViewItem != null)
{
var index = IndexFromContainer(element);
if (Words.arrayW[index].Length > 0)
{
listViewItem.Foreground = new SolidColorBrush(Colors.Black);
}
else
{
listViewItem.Foreground = new SolidColorBrush(Colors.Gray);
listViewItem.IsEnabled = false;
}
}
}
}
在Xaml中:
<controls:StripedListView x:Name="letterListView" ItemsSource="{Binding}">
<controls:StripedListView.ItemTemplate>
<DataTemplate>
etc...
</DataTemplate>
</controls:StripedListView.ItemTemplate>
</controls:StripedListView>
等
您是使用单选模式还是多选模式进行尝试?单选模式检查我的答案它可能会解决您的问题。谢谢您的回答@Rohit!我使用isEnabled