如何制作一些ListView项目' greyed-out'而且不可选择?

时间:2016-01-05 10:02:36

标签: c# windows-store-apps winrt-xaml windows-8.1-universal

ListView控件中的某些项目可以选择并具有普通文本。 但是,有些项目虽然作为项目包含在ListView中,但仍然是不可选择/不可点击的,并且是“灰色的”。

在Windows-Store-Apps中,我们可以在ListView中选择Single / Multiple / None项。但是如何才能使某些索引中的某些项目在代码中无法选择/不可点击并且显示为灰色?

我设法在某个索引处访问ListView的Item:

myListView.ItemContainerGenerator.ContainerFromIndex(i)

但我找不到任何选项来自定义其选定的事件处理程序。 知道如何实现吗?

2 个答案:

答案 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
}
        }}

希望它有所帮助。