3

ListView コントロールの一部の項目は選択可能になり、通常のテキストが表示されます。ただし、一部の項目は、ListView に項目として含まれていても、選択またはクリックできず、「グレー表示」されます。

Windows-Store-Apps では、ListView で単一/複数/なしの項目を選択できます。しかし、主にコードで、特定のインデックスの特定のアイテムを選択不可/クリック不可および「グレー表示」にする方法は?

特定のインデックスで ListView の Item にアクセスできました。

myListView.ItemContainerGenerator.ContainerFromIndex(i)

しかし、選択したイベント ハンドラーをカスタマイズするオプションが見つかりませんでした。それを達成する方法はありますか?

4

2 に答える 2

1

私は解決策を見つけました:

コントロールをオーバーライドしてListView、StripedListView を作成しました。次に、作成後にコントロールPrepareContainerForItemOverrideの設定を担当する をオーバーライドすることで、背景色を変更し、オプションを falseに設定できます。ListViewItemItemListView.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;
                }
            }
        }
    }

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 に答える
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を実装する nonClickable アイテムの Set Different 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 に答える