ListView控件中的某些项目可以选择并具有普通文本。 但是,有些项目虽然作为项目包含在ListView中,但仍然是不可选择/不可点击的,并且是“灰色的”。
在Windows-Store-Apps中,我们可以在ListView中选择Single / Multiple / None项。但是如何才能使某些索引中的某些项目在代码中无法选择/不可点击并且显示为灰色?
我设法在某个索引处访问ListView的Item:
myListView.ItemContainerGenerator.ContainerFromIndex(i)
但我找不到任何选项来自定义其选定的事件处理程序。 知道如何实现吗?
答案 0 :(得分:1)
我找到了一个解决方案:
我已覆盖ListView
控件并创建一个StripedListView。然后通过覆盖负责在PrepareContainerForItemOverride
控件创建后设置ListViewItem
控件的ItemListView.isEnabled
,您可以修改背景颜色并将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;
}
}
}
}
选项设置为false:
<controls:StripedListView x:Name="letterListView" ItemsSource="{Binding}">
<controls:StripedListView.ItemTemplate>
<DataTemplate>
etc...
</DataTemplate>
</controls:StripedListView.ItemTemplate>
</controls:StripedListView>
在Xaml中:
//Initialisation de la map couleur
var mapCouleurs = new Map();
mapCouleurs.set("Blanc", "white");
mapCouleurs.set("Rouge", "red");
mapCouleurs.set("Bleu", "blue");
mapCouleurs.set("Vert", "green");
mapCouleurs.set("Orange", "orange");
mapCouleurs.set("Violet", "purple");
mapCouleurs.set("Jaune", "yellow");
mapCouleurs.set("Gris", "grey");
mapCouleurs.set("Noir", "black");
mapCouleurs.forEach(function(value, key)
{
document.getElementById("select").innerHTML += "<option value='" + value + "'> " + key + "</option>";
})
答案 1 :(得分:0)
在单选模式下。 首先将一个布尔属性添加到绑定类型的类,该类定义了可点击的项目,如此
class TestClass
{
Boolean IsClickAllowed{get;set;}
string name{get;set;}
}
然后创建一个TestClass类型的源列表,并将其设置为Listview的itemssource,如下所示
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;
用于为实现 DataTemplateSelector 的非可点击项目以及最后在ItemClick事件中单击句柄的灰色设置不同DataTemplate。您需要将IsItemClickEnabled设置为true。
private void MyList_ItemClick(object sender, ItemClickEventArgs e)
{
var item = e.ClickedItem as TestClass;
if (item != null){
if(item.IsClickAllowed){
//Do Stuff here
}else
{
//Do Nothing
}
}}
希望它有所帮助。