2011-09-01 23 views
7

मुझे पता है कि आप ListBoxItem शैली के लेआउटस्टेट्स के साथ खेलकर सिल्वरलाइट 4 में इसे प्राप्त कर सकते हैं, यानी पहले से लोड किया गया, पहले लोड किया गया और बाद में लोड किया गया।WP7 - एक सूची बॉक्स में आइटम जोड़ने/निकालने के लिए

यह WP7 में बिल्कुल काम नहीं कर रहा है हालांकि ये राज्य डिफ़ॉल्ट शैली में मौजूद हैं।

मैं वर्तमान में संस्करण 7.1 का उपयोग कर रहा हूं।

क्या कोई तरीका है कि मैं यह काम कर सकता हूं?

धन्यवाद, Xin

उत्तर

5
इस मैं Artefact Animator इस्तेमाल किया के लिए

, यह सिल्वरलाइट के लिए है, लेकिन WP7 के भी लिए पूरी तरह से काम करता है। कोड केवल जोड़ दिखाता है। परियोजना के नमूना पृष्ठ से पूरा कोड।

MainPage.xaml

<UserControl.Resources> 

    <!-- ADDS SMOOTH SCROLL --> 
    <ItemsPanelTemplate x:Key="ItemsPanelTemplate"> 
     <StackPanel/> 
    </ItemsPanelTemplate> 

</UserControl.Resources> 
<Grid> 
    <ListBox x:Name="lb" Height="247" Width="100" ItemsPanel="{StaticResource ItemsPanelTemplate}" /> 
    <Button x:Name="addBtn" Content="Add" Height="72" HorizontalAlignment="Left" Margin="159,145,0,0" VerticalAlignment="Top" Width="160" /> 
</Grid> 

MainPage.xaml.cs

public partial class MainPage : PhoneApplicationPage 
{ 
    private static ScrollViewer _scrollViewer; 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     Loaded += MainPage_Loaded; 
    } 

    void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     // INIT 
     lb.Items.Clear(); 
     lb.UpdateLayout(); 

     // SCROLL INTERACTION 
     _scrollViewer = FindVisualChild<ScrollViewer>(lb); 
     var bar = FindVisualChild<ScrollBar>(_scrollViewer); 
     if (bar != null) 
      bar.ValueChanged += (s, args) => SetValue(ListBoxScrollOffsetProperty, args.NewValue); 

     // INPUT 
     addBtn.Click += (s, args) => AddItem(); 
    } 

    private void AddItem() 
    { 
     // Create New ListBoxItem 
     var lbi = new ListBoxItem 
     { 
      Content = "Item " + lb.Items.Count, 
      RenderTransform = new CompositeTransform 
      { 
       TranslateX = -lb.Width 
      }, 
     }; 

     // Add ListBoxItem 
     lb.Items.Add(lbi); 
     lb.UpdateLayout(); 

     // Animate In Item 
     ArtefactAnimator.AddEase(lbi.RenderTransform, CompositeTransform.TranslateXProperty, 0, 1, AnimationTransitions.CubicEaseOut, 0); 
     ArtefactAnimator.AddEase(this, ListBoxScrollOffsetProperty, _scrollViewer.ScrollableHeight, .8, AnimationTransitions.CubicEaseOut, 0); 
    } 


    // LISTBOX SCROLL OFFSET 
    public static readonly DependencyProperty ListBoxScrollOffsetProperty = 
    DependencyProperty.Register("ListBoxScrollOffset", typeof(double), typeof(MainPage), new PropertyMetadata(0.0, OnListBoxScrollOffsetChanged)); 

    private static void OnListBoxScrollOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     _scrollViewer.ScrollToVerticalOffset((double)e.NewValue); 
    } 

    public double ListBoxScrollOffset 
    { 
     get 
     { 
      return (double)GetValue(ListBoxScrollOffsetProperty); 
     } 
     set 
     { 
      SetValue(ListBoxScrollOffsetProperty, value); 
     } 
    } 

    // VISUAL HELPER 
    public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject 
    { 
     for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
     { 
      var child = VisualTreeHelper.GetChild(obj, i); 
      if (child != null && child is childItem) 
      { 
       return (childItem)child; 
      } 
      else 
      { 
       var childOfChild = FindVisualChild<childItem>(child); 
       if (childOfChild != null) 
       { 
        return childOfChild; 
       } 
      } 
     } 
     return null; 
    } 
} 
+0

+1 अच्छा नमूनों के लिए, मैं एक गहरी नज़र आज रात धन्यवाद ले जाएगा,! –

+0

आपका स्वागत है, मैं आपकी प्रतिक्रिया के लिए खुश हूँ! – Arterius

+0

आर्टेरियस मैं आपके उत्तर को स्वीकार करने जा रहा हूं क्योंकि मैंने आपके द्वारा प्रदान की गई कोड लिब का उपयोग किया और जो भी मैं चाहता था, हासिल किया, मुझे उम्मीद है कि भविष्य में विंडोज फोन में मुझे ऐसा करने की आवश्यकता नहीं होगी ... धन्यवाद! :) –

संबंधित मुद्दे