2016-03-21 10 views
0

私は現在Windows 10で作業していますが、ListViewを使用して自分の要件に基づいてアイテムを表示しています。今度は、ユーザーがListView Itemをクリックして、ユーザーエクスペリエンスを簡単にするためのオプションを提供するときに、同じページでListViewを拡張したいと考えています。Windows 10のSelectionChangedイベントでListView Itemを展開する方法は?

私はListViewを実装し、DataTemplateを使用してアイテムを表示する方法を知っていますが、ListViewを使用して要件を達成できるかどうかはわかりません。

私は以下のような何かを達成したい:

enter image description here

私はListView項目をクリックの上など、連絡先などのオプションを表示する写真を追加したいと思います。私もPopupMenuを使って同じことを達成しようとしましたが、最大6つのコマンドを追加するのに限界があり、それ以上のコマンドがあります。これらのオプションを動的に追加したいと思います。

+0

私はあなたの必要性を本当に理解していません。しかし、私はそれを試してみます: ボタンをタップしたときに、あらかじめ定義された内容のポップアップを表示するには、ボタンとフライアウトを使用しますか? – thang2410199

答えて

1

ここでは、必要なものを基本的に実装しています。

このリストビューXAMLを使用する:このコードビハインド

<ListView SelectionChanged="ListView_SelectionChanged"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 

       <Panel.Resources> 
        <Style x:Name="MainAreaStyle" TargetType="Image"> 
         <Setter Property="Width" Value="300" /> 
         <Setter Property="Margin" Value="0" /> 
        </Style> 
        <Style x:Name="DetailAreaStyle" TargetType="Rectangle"> 
         <Setter Property="Height" Value="150" /> 
         <Setter Property="Height" Value="300" /> 
         <Setter Property="Margin" Value="0,0,0,8" /> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </Style> 
       </Panel.Resources> 

       <Image Source="http://i.stack.imgur.com/L5sb9.png" Style="{StaticResource MainAreaStyle}" /> 
       <Rectangle x:Name="DetailArea" Fill="DarkBlue" Style="{StaticResource DetailAreaStyle}" /> 

      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <x:String>One</x:String> 
    <x:String>Two</x:String> 
    <x:String>Three</x:String> 
</ListView> 

用途:

UIElement previous = null; 
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (previous != null) previous.Visibility = Visibility.Collapsed; 
    if (e.AddedItems.Any()) 
    { 
     var container = (sender as ListView).ContainerFromItem(e.AddedItems.First()); 
     (previous = Child<Rectangle>(container, "DetailArea")).Visibility = Visibility.Visible; 
    } 
} 

public T Child<T>(DependencyObject parent, string name) where T : FrameworkElement 
{ 
    return Children(parent).OfType<T>().FirstOrDefault(x => x.Name == name); 
} 

public List<DependencyObject> Children(DependencyObject parent) 
{ 
    var list = new List<DependencyObject>(); 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
    { 
     var child = VisualTreeHelper.GetChild(parent, i) as DependencyObject; 
     if (child != null) 
     { 
      list.Add(child); 
      list.AddRange(Children(child)); 
     } 
    } 
    return list; 
} 

は次のようになります。

enter image description here

メイクセンス?もちろん、もっとやるべきことがあります。しかし、これはあなたを開始する必要があります。

幸運のベスト。

+0

ありがとうございました。それは本当に働いた。パフォーマンスの問題を起こすことなくイメージをダウンロードした後、イメージピクセルの色を変更するAPIをいくつか提案できますか? –

関連する問題