2016-01-05 80 views
3

ListView控件中的某些項目可以選擇並且具有普通文本。 但是,有些項目雖然包含在ListView中作爲項目,但將不可選擇/不可點擊和變灰。如何使一些ListView項目變灰並且不可選?

在Windows-Store-Apps中,我們可以在ListView中選擇單個/多個/無項目。但是在代碼中,如何使特定索引中的某些項無法選擇/不可點擊和「變灰」?

我設法在一定的索引來訪問的ListView的項目:

myListView.ItemContainerGenerator.ContainerFromIndex(i) 

但我無法找到任何選項來定製其選定的事件處理程序。 任何想法如何實現?

+0

你是用單選模式還是多選模式試試這個? – Rohit

+0

單選模式 – yalematta

+0

查看我的回答可能會解決您的問題。 – Rohit

回答

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> 
0

在單選模式下。 首先添加一個布爾屬性類綁定類型的定義哪些項目是可點擊的這樣

class TestClass 
    { 
    Boolean IsClickAllowed{get;set;} 
    string name{get;set;} 
    } 

然後創建的TestClass類型的源列表和類似這樣的

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; 

其設置爲的ItemsSource列表視圖的並針對實現DataTemplateSelector的NonClickable項目設置不同的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 
} 
     }} 

希望它有幫助。

+0

感謝您的回答@Rohit!我找到了一個使用'isEnabled'的最佳方法 – yalematta