2016-03-21 16 views
0

Şu anda Windows 10 ile çalışıyorum ve öğeleri gereksinimime göre görüntülemek için bir ListView kullanıyorum. Şimdi Kullanıcı ListView Öğesini tıklayıp kullanıcı deneyimini kolaylaştırmak için ona bazı seçenekler sağladığında aynı sayfada ListView'i genişletmek istiyorum.Windows 10'da SelectionChanged olayında bir ListView Öğesi nasıl genişletilir?

DataTemplate kullanarak ListView ve görüntüleme öğelerinin nasıl uygulanacağının farkındayım, ancak gereksinimi ListView kullanarak elde edip edemeyeceğimi bilmiyorum.

aşağıda gibi bir şey başarmak istiyorum:

enter image description here

ben ListView Öğe tıklaması vb fotoğraf ekle, Contact gibi seçenekleri görüntülemek istiyorum. Aynı zamanda PopupMenu kullanarak da aynı şeyi yapmaya çalıştım, ancak 6'ya kadar komut eklemenin sınırlamaları var ve bundan daha fazla komut var. Bu seçenekleri dinamik olarak eklemek istiyorum.

+0

Gerçekten ihtiyacınızı anlamıyorum. Ama ben bunu deneyeceğim: Kullanıcı, düğmeyi tıkladığında önceden tanımlanmış içeriğe sahip bir pop-up görüntülemek için düğmesini ve Flyout'u kullanın. – thang2410199

cevap

1

İşte ne istediğinizin temel bir uygulaması.

bu ListView XAML kullanma: Bu kod arkasında

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

Kullanım:

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; 
} 

bu gibi görünüyor:

enter image description here

Yap duygusu? Elbette yapacak daha çok şey var. Ama bu başlaman gerek.

Şansın en iyisi.

+0

Çok teşekkürler. Gerçekten işe yaradı. Görüntüyü indirdikten sonra, görüntü sorunlarını indirmeden görüntü piksel rengini değiştirmek için bazı API'lar önerebilir misiniz? –