2016-04-11 9 views
0

Veri Şablon KoduEkran tıklamasıyla üzerine Şimdi Liste Görünümü Item tıklamasıyla

<DataTemplate x:Key="CachelvTemplate"> 
      <Grid Margin="21,3,21,3" Height="60"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="auto"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="auto"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Center" Foreground="Black" FontSize="20"/> 
       <Image Grid.Column="2" Source="/Assets/Icons/selectedCache.png" HorizontalAlignment="Right" VerticalAlignment="Center" Stretch="Fill" MaxHeight="20" MaxWidth="20" Opacity="0" /> 
      </Grid> 
</DataTemplate> 

Liste Görünümü Kod

<ListView x:Name="cacheList" Tapped="cacheList_ItemClick"      
         ItemTemplate="{StaticResource CachelvTemplate}" /> 

bir Liste Görünümü Veri Şablon bir UI öğesi (Görüntü, Metin) Bir liste öğesi olarak, (veri Şablonundan) görüntünün opaklığını değiştirmek ya da bir şekilde görünür hale getirmek istiyorum. Sadece seçilen Liste Görünümü Öğesi için.

cevap

0

Her şeyden önce Tapped yerine ItemClick veya SelectionChanged olayını kullanmış olmalısınız. SelectionChanged olayını kullanacağım. Sen seçilmemiş öğe resmi çöktü yapmak

private void cacheList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      foreach (var item in e.AddedItems) 
      { 
       ListViewItem selectedItem = (sender as ListView).ContainerFromItem(item) as ListViewItem; 
       Image image = FindElementInVisualTree<Image>(selectedItem); 
       if(image!=null) 
       { 
        image.Visibility = Visibility.Visible; 
       } 
      } 
     } 
     private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject 
     { 
      var count = VisualTreeHelper.GetChildrenCount(parentElement); 
      if (count == 0) return null; 

      for (int i = 0; i < count; i++) 
      { 
       var child = VisualTreeHelper.GetChild(parentElement, i); 
       if (child != null && child is T) 
        return (T)child; 
       else 
       { 
        var result = FindElementInVisualTree<T>(child); 
        if (result != null) 
         return result; 
       } 
      } 
      return null; 
     } 

Güncelleme seçilen öğenin görüntü kontrolünü almak için VisualTreeHelper arasında kullanabilirsiniz

private void cacheList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     foreach (var item in e.AddedItems) 
     { 
      ListViewItem selectedItem = (sender as ListView).ContainerFromItem(item) as ListViewItem; 
      Image image = FindElementInVisualTree<Image>(selectedItem); 
      if (image != null) 
      { 
       image.Visibility = Visibility.Visible; 
      } 
      FindListViewItem((sender as ListView), selectedItem); 
     } 
    } 
    private void FindListViewItem(DependencyObject parent,ListViewItem selectedItem) 
    { 
     var count = VisualTreeHelper.GetChildrenCount(parent); 
     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i); 
      if (child is ListViewItem && (child as ListViewItem) != selectedItem) 
      { 
       Image unselectedimage = FindElementInVisualTree<Image>(child); 
       if (unselectedimage != null) 
       { 
        unselectedimage.Visibility = Visibility.Collapsed; 
       } 
      } 
      else 
      { 
       FindListViewItem(child, selectedItem); 
      } 

     } 
    } 
+0

Evet bu bir cazibe gibi çalışır, ama benim bütün kullanım söz konusu değildir tamamlayınız. Farklı bir liste öğesi seçtiğimde, seçili olmayan liste öğelerinin görüntünün görünmesini istemiyorum. Herhangi bir fikir ? –

+0

Bunu açıklayabilir misiniz? – Archana

+0

Liste görünümü var. Seçilen liste öğesi vurgulanır (arka plan rengi değişir) ve bir onay işareti gösterilir. Onay işareti, yalnızca seçilen öğe listesi görünümü için gösterilmesi gereken bir görüntüdür. Şimdi, ne zaman bir kez seçildiğinde, onay işareti seçili değilken bile görünür olmaya devam eder. Bu yüzden sadece seçilen liste öğesi için görünür olması için onay işaretine ihtiyacım var. ayrıntılar için [link] https://drive.google.com/open?id=0B4JsxIX3-8pNRXZJckN5dVRSQTg –