internal void SaveState(Dictionary <string, object> pageState) { if (Root.ItemsPanelRoot == null) { return; } ItemsStackPanel stackPanel = Root.ItemsPanelRoot as ItemsStackPanel; if (stackPanel != null) { pageState.Add(LAST_INDEX_KEY, stackPanel.LastVisibleIndex); } else { ItemsWrapGrid wrapGrid = Root.ItemsPanelRoot as ItemsWrapGrid; if (wrapGrid != null) { pageState.Add(LAST_INDEX_KEY, wrapGrid.LastVisibleIndex); } else { DebugHelper.Alert(new CallerInfo(), "Unexpected root type: {0}", Root.ItemsPanelRoot.GetType()); } } }
private async void OnLoaded(object sender, RoutedEventArgs e) { var panel = ItemsPanelRoot as ItemsStackPanel; if (panel != null) { ItemsStack = panel; ItemsStack.SizeChanged += Panel_SizeChanged; SetScrollMode(); } using (await _loadMoreLock.WaitAsync()) { if (ScrollingHost.ScrollableHeight < 200 && Items.Count > 0) { if (ViewModel.IsFirstSliceLoaded != true) { await ViewModel.LoadPreviousSliceAsync(false, true); } await ViewModel.LoadNextSliceAsync(false, true); } } }
private void OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { if (sender is ScrollViewer scrollingHost) { ViewModel.VerticalOffset = scrollingHost.VerticalOffset; if (DateHeaderLabel == null) { return; } var index = ScrollingHost.ItemsPanelRoot switch { ItemsStackPanel stackPanel => stackPanel.FirstVisibleIndex, ItemsWrapGrid wrapGrid => wrapGrid.FirstVisibleIndex, _ => - 1 }; var container = ScrollingHost.ContainerFromIndex(index) as SelectorItem; if (container == null || container.Tag is not Message message) { return; } DateHeaderLabel.Text = Converter.MonthGrouping(Utils.UnixTimestampToDateTime(message.Date)); _dateHeaderTimer.Stop(); _dateHeaderTimer.Start(); ShowHideDateHeader(scrollingHost.VerticalOffset > ProfileHeader.ActualHeight, true); } }
private void ListViewEx_Loaded(object sender, RoutedEventArgs e) { this.Loaded -= ListViewEx_Loaded; _scrollViewer = this.FindFirstChild<ScrollViewer>(); if (_scrollViewer != null) _scrollViewer.ViewChanged += Sv_ViewChanged; _panel = ItemsPanelRoot as ItemsStackPanel; }
/// <summary> /// UI Initialized /// </summary> private void ItemsStackPanel_Loaded(object sender, RoutedEventArgs e) { _messageScrollviewer = Common.GetScrollViewer(MessageList); if (_messageScrollviewer != null) { _messageScrollviewer.ViewChanged += MessageScrollviewer_ViewChanged; } _messageStacker = sender as ItemsStackPanel; }
/// <summary> /// Finds ItemStackPanel and MessageScroller from MessageList once loaded. /// </summary> private void ItemsStackPanel_Loaded(object sender, RoutedEventArgs e) { _messageScrollViewer = MessageList.FindChild <ScrollViewer>(); _itemsStackPanel = sender as ItemsStackPanel; if (_messageScrollViewer != null) { _messageScrollViewer.ViewChanged += MessageScrollViewer_ViewChanged; } }
private static async void InternalModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { AdaptiveCollectionView obj = (AdaptiveCollectionView)d; AdaptiveCollectionViewMode value = (AdaptiveCollectionViewMode)e.NewValue; if (Enum.IsDefined(typeof(AdaptiveCollectionViewMode), value) == false) { throw new ArgumentException($"{nameof(AdaptiveCollectionViewMode)} is not defined", nameof(value)); } int index = -1; if (obj.Items.Count > 0) { ItemsStackPanel stackPanel = obj.ItemsPanelRoot as ItemsStackPanel; if (stackPanel != null) { index = stackPanel.FirstVisibleIndex; } ItemsWrapGrid wrapGrid = obj.ItemsPanelRoot as ItemsWrapGrid; if (wrapGrid != null) { index = wrapGrid.FirstVisibleIndex; } } if (value == AdaptiveCollectionViewMode.List) { obj.ItemsPanel = obj._itemsStackPanel; } else { obj.ItemsPanel = obj._itemsWrapGrid; } if (obj.ModeChanged != null) { obj.ModeChanged(obj, new AdaptiveCollectionViewModeChangedEventArgs((AdaptiveCollectionViewMode)e.OldValue, (AdaptiveCollectionViewMode)e.NewValue)); } await obj.WaitForLayoutUpdatedAsync(); if (obj.SelectedItem != null) { obj.ScrollIntoView(obj.SelectedItem, ScrollIntoViewAlignment.Leading); } else if (index > -1) { var item = obj.Items.ElementAtOrDefault(index); if (item != null) { obj.ScrollIntoView(item, ScrollIntoViewAlignment.Leading); } } }
private void ListViewOnLoaded(object sender, RoutedEventArgs e) { _listView.DragItemsStarting += ListViewBase_OnDragItemsStarting; if (_listView.ItemsPanelRoot is ItemsStackPanel itemsStackPanel) { _listViewItemsPanelRoot = itemsStackPanel; } _listView.DragEnter += ListViewOnDragEnter; _listView.DragLeave += ListViewOnDragLeave; }
private void lvw_Lessons_Monday_SelectionChanged(object sender, SelectionChangedEventArgs e) { if ((sender as ListView).SelectionMode == ListViewSelectionMode.Single && (sender as ListView).SelectedIndex != -1) { ListView listview = (ListView)sender; ItemsStackPanel itemspanel = (ItemsStackPanel)listview.ItemsPanelRoot; ListViewItem item = (ListViewItem)itemspanel.Children[(sender as ListView).SelectedIndex]; Grid rootgrid = (Grid)item.ContentTemplateRoot; toggle_StackPanel((rootgrid.Children[1] as StackPanel)); } }
private async Task LoadMoreItemsAsync(ItemsStackPanel itemsStackPanel) { if (!SupportIncrementalLoading.HasMoreItems) { return; } // This is to handle the case when the InternalLoadMoreItemsAsync // does not fill the entire space of the ListView. // This event is needed untill the desired size of itemsStackPanel // is less then the available space. itemsStackPanel.LayoutUpdated += OnLayoutUpdated; await InternalLoadMoreItemsAsync(); }
private void OnLoaded(object sender, RoutedEventArgs e) { var panel = ItemsPanelRoot as ItemsStackPanel; if (panel != null) { ItemsStack = panel; ItemsStack.ItemsUpdatingScrollMode = UpdatingScrollMode == UpdatingScrollMode.KeepItemsInView || UpdatingScrollMode == UpdatingScrollMode.ForceKeepItemsInView ? ItemsUpdatingScrollMode.KeepItemsInView : ItemsUpdatingScrollMode.KeepLastItemInView; ItemsStack.SizeChanged += Panel_SizeChanged; } }
private void ListViewOnUnloaded(object sender, RoutedEventArgs e) { if (_scrollViewer != null) { _scrollViewer.ViewChanged -= ScrollViewerOnViewChanged; } _scrollViewer = null; if (_itemsStackPanel != null) { _itemsStackPanel.SizeChanged -= ItemsStackPanelOnSizeChanged; } _itemsStackPanel = null; }
/// <summary> /// Delete the current song /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteSongClick(object sender, RoutedEventArgs e) { AppBarButton button = (AppBarButton)sender; Song song = (Song)button.DataContext; ItemsStackPanel parent = (ItemsStackPanel)VisualTreeHelper.GetParent( VisualTreeHelper.GetParent(VisualTreeHelper.GetParent( VisualTreeHelper.GetParent((AppBarButton)sender)))); Season s = (Season)parent.DataContext; int index = s.Songs.ToList().FindIndex(cur => cur == song); s.Songs.RemoveAt(index); }
protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); // First populate our local variable for referencing ItemsStackPanel for the first time. if (!_isFirstItemContainerLoaded && _virtualizedPanel == null) { _virtualizedPanel = ItemsPanelRoot as ItemsStackPanel; } this.PrepareContainerForItemOverrideEx <ListViewItem>( element, () => (_virtualizedPanel.FirstVisibleIndex, _virtualizedPanel.LastVisibleIndex), ref _isFirstItemContainerLoaded); }
private void ItemsStackPanelDemo_Loaded(object sender, RoutedEventArgs e) { DispatcherTimer dTimer = new DispatcherTimer(); dTimer.Interval = TimeSpan.Zero; dTimer.Tick += DTimer_Tick; dTimer.Start(); // 获取 ListView 中的 ItemsStackPanel 控件 _itemsStackPanel1 = listView1.ItemsPanelRoot as ItemsStackPanel; _itemsStackPanel2 = listView2.ItemsPanelRoot as ItemsStackPanel; // 获取 ListView 中的 ItemsStackPanel 控件 // _itemsStackPanel1 = Helper.GetVisualChild<ItemsStackPanel>(listView1); // _itemsStackPanel2 = Helper.GetVisualChild<ItemsStackPanel>(listView2); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Page_Loaded(object sender, RoutedEventArgs e) { List <ScrollViewer> list = new List <ScrollViewer>(); HomeHelper.FindChildren <ScrollViewer>(list, listStories); //先找到ScrollViewer 注册ViewChanged事件 if (list.Count > 0) { _scrollView = list[0]; _scrollView.ViewChanged += HomePage_ViewChanged; } List <ItemsStackPanel> list2 = new List <ItemsStackPanel>(); HomeHelper.FindChildren <ItemsStackPanel>(list2, listStories); //找到ItemStackPanel 它包含FirstVisibleIndex属性 if (list.Count > 0) { _itemsPanel = list2[0]; } }
private async void OnLoaded(object sender, RoutedEventArgs e) { var panel = ItemsPanelRoot as ItemsStackPanel; if (panel != null) { ItemsStack = panel; ItemsStack.SizeChanged += Panel_SizeChanged; } if (IncrementalSource != null && IncrementalSource.HasMoreItems && !_isAlreadyLoading) { _isAlreadyLoading = true; await IncrementalSource.LoadMoreItemsAsync(0); _isAlreadyLoading = false; } }
private async void ListViewOnLoaded(object sender, RoutedEventArgs e) { if (!(_listView.ItemsPanelRoot is ItemsStackPanel itemsStackPanel)) { return; } _itemsStackPanel = itemsStackPanel; _scrollViewer = VisualTreeHelperUtils.Child <ScrollViewer>(_listView); // This event handler loads more items when scrolling. _scrollViewer.ViewChanged += ScrollViewerOnViewChanged; // This event handler loads more items when size is changed and there is more // room in ListView. _itemsStackPanel.SizeChanged += ItemsStackPanelOnSizeChanged; await LoadMoreItemsAsync(itemsStackPanel); }
private void AutoSelectParagraph() { if (ParaVisualizer == null) { ParaVisualizer = ContentGrid.ChildAt <ItemsStackPanel>(0, 0, 0, 0, 0, 0, 1); if (ParaVisualizer == null) { return; } } Rect ScreenBounds = IsHorz ? new Rect(0, 0, ActualWidth * 0.8, ActualHeight) : new Rect(0, 0, ActualWidth, ActualHeight * 0.8); if (VisibleParagraph != null && VisibleContext?.DataContext?.Equals(SelectedParagraph) == true) { if (VisualTreeHelper.FindElementsInHostCoordinates(ScreenBounds, ParaVisualizer).Contains(VisibleParagraph)) { return; } } int l = ParaVisualizer.Children.Count(); for (int i = 0; i < l; i++) { FrameworkElement Item = ( FrameworkElement )ParaVisualizer.Children[i]; if (VisualTreeHelper.FindElementsInHostCoordinates(ScreenBounds, ParaVisualizer).Contains(Item)) { FrameworkElement _ContentPresenter = Item.ChildAt <FrameworkElement>(0, 0, 1); if (_ContentPresenter?.DataContext is Paragraph P) { VisibleParagraph = Item; VisibleContext = _ContentPresenter; SelectedParagraph = P; ContentGrid.SelectedItem = P; Reader.SelectAndAnchor(P); break; } } } }
/// <summary> /// 列表对象加载完成后的逻辑代码 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ListView_Loaded(object sender, RoutedEventArgs e) { //查找滚动视图,并赋值到我们刚刚添加的属性里 scroll = FindVisualChild <ScrollViewer>(ListView, "ScrollViewer"); //判断是否为空,不为空的话就添加一个事件 if (scroll == null) { return; } else { //监听滚动事件 scroll.ViewChanged += Scroll_ViewChanged; } ItemsPresenter v = FindVisualChild <ItemsPresenter>(ListView, ""); ItemsStackPanel items = FindVisualChild <ItemsStackPanel>(v, ""); _panelOrientation = items.Orientation; }
private async void OnLoaded(object sender, RoutedEventArgs e) { var panel = ItemsPanelRoot as ItemsStackPanel; if (panel != null) { ItemsStack = panel; ItemsStack.SizeChanged += Panel_SizeChanged; SetScrollMode(); } if (ScrollingHost.ScrollableHeight < 120 && Items.Count > 0) { if (!ViewModel.IsFirstSliceLoaded) { await ViewModel.LoadPreviousSliceAsync(false, ItemsStack.LastVisibleIndex == ItemsStack.LastCacheIndex); } await ViewModel.LoadNextSliceAsync(); } }
private void MemberListControl_OnLoaded(object sender, RoutedEventArgs e) { // Todo: sticky headers ScrollViewer sv = FindChildOfType <ScrollViewer>(MemberList); ItemsStackPanel sp = FindChildOfType <ItemsStackPanel>(sv); timer = new Timer( (state) => { double top = sv.VerticalOffset; double bottom = sv.VerticalOffset + sv.ViewportHeight; double total = sv.ScrollableHeight + sv.ViewportHeight; ViewModel.UpdateGuildSubscriptionsCommand.Execute((top / total, bottom / total)); }, null, Timeout.Infinite, Timeout.Infinite); sv.ViewChanging += (sender1, args) => { long currentTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); if (currentTime - lastTime > 100) { timer.Change(Timeout.Infinite, Timeout.Infinite); double top = sv.VerticalOffset; double bottom = sv.VerticalOffset + sv.ViewportHeight; double total = sv.ScrollableHeight + sv.ViewportHeight; ViewModel.UpdateGuildSubscriptionsCommand.Execute((top / total, bottom / total)); } else { timer.Change(110, Timeout.Infinite); } lastTime = currentTime; }; }
private void StackPanel_loaded(object sender, RoutedEventArgs e) { stackPanelObj = sender as ItemsStackPanel; }
private void View_PointerMoved(object sender, PointerRoutedEventArgs e) { if (IsEnabled && e.Pointer.PointerDeviceType == PointerDeviceType.Mouse && e.GetCurrentPoint(View).Properties.IsLeftButtonPressed) { if (Interlocked.Exchange(ref Locker, 1) == 0) { try { Point RelativeEndPoint = e.GetCurrentPoint(View).Position; SrcollIfNeed(RelativeEndPoint); Point AbsEndPoint = new Point(RelativeEndPoint.X + InnerScrollView.HorizontalOffset, RelativeEndPoint.Y + InnerScrollView.VerticalOffset); Point RelativeStartPoint = new Point(AbsStartPoint.X - InnerScrollView.HorizontalOffset, AbsStartPoint.Y - InnerScrollView.VerticalOffset); DrawRectangleInCanvas(RelativeStartPoint, RelativeEndPoint); if (Math.Abs(RelativeStartPoint.X - RelativeEndPoint.X) >= 20 && Math.Abs(RelativeStartPoint.Y - RelativeEndPoint.Y) >= 20) { List <FileSystemStorageItemBase> VisibleList = new List <FileSystemStorageItemBase>(); if (View is ListView) { ItemsStackPanel VirtualPanel = View.ItemsPanelRoot as ItemsStackPanel; for (int i = VirtualPanel.FirstVisibleIndex; i <= VirtualPanel.LastVisibleIndex; i++) { VisibleList.Add(View.Items[i] as FileSystemStorageItemBase); } } else { ItemsWrapGrid VirtualPanel = View.ItemsPanelRoot as ItemsWrapGrid; for (int i = VirtualPanel.FirstVisibleIndex; i <= VirtualPanel.LastVisibleIndex; i++) { VisibleList.Add(View.Items[i] as FileSystemStorageItemBase); } } foreach (FileSystemStorageItemBase Item in VisibleList.Except(AbsItemLocationRecord.Select((Rec) => Rec.Key))) { if (View.ContainerFromItem(Item) is SelectorItem Selector) { AbsItemLocationRecord.Add(new KeyValuePair <FileSystemStorageItemBase, Rect>(Item, Selector.TransformToVisual(View).TransformBounds(new Rect(InnerScrollView.HorizontalOffset, InnerScrollView.VerticalOffset, Selector.ActualWidth, Selector.ActualHeight)))); } } Rect AbsBoxSelectionRect = new Rect(Math.Min(AbsStartPoint.X, AbsEndPoint.X), Math.Min(AbsStartPoint.Y, AbsEndPoint.Y), Math.Abs(AbsStartPoint.X - AbsEndPoint.X), Math.Abs(AbsStartPoint.Y - AbsEndPoint.Y)); foreach (KeyValuePair <FileSystemStorageItemBase, Rect> Pair in AbsItemLocationRecord) { Rect Intersect = RectHelper.Intersect(AbsBoxSelectionRect, Pair.Value); if (!Intersect.IsEmpty && Intersect.Width > 0 && Intersect.Height > 0) { if (!View.SelectedItems.Contains(Pair.Key)) { View.SelectedItems.Add(Pair.Key); } } else { View.SelectedItems.Remove(Pair.Key); } } } } catch (Exception ex) { LogTracer.Log(ex); } finally { _ = Interlocked.Exchange(ref Locker, 0); } } } }