3

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

在 Windows-Store-Apps 中,我们可以在 ListView 中选择 Single/Multiple/None 项目。但是,主要在代码中如何使某些索引处的某些项目不可选择/不可点击和“灰显”?

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

myListView.ItemContainerGenerator.ContainerFromIndex(i)

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

4

2 回答 2

1

在单选模式下。首先将一个布尔属性添加到绑定类型的类中,它定义了哪些项目可以像这样单击

  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的非可点击项设置不同的DataTemplate以及最后为 ItemClick 事件中的单击句柄灰显。您需要将 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
}
        }}

希望能帮助到你。

于 2016-01-06T07:40:14.920 回答
1

我找到了一个解决方案:

我已经覆盖了ListView控件并创建了一个 StripedListView。然后通过重写PrepareContainerForItemOverride负责在ListViewItem创建控件后设置控件的 ,您可以修改背景颜色并将ItemListView.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>
于 2016-01-06T13:42:37.260 回答