void PowerListBoxItem_Loaded(object sender, RoutedEventArgs e) { if (DesignerProperties.GetIsInDesignMode(this)) { return; } //初始化列表项的多选状态 CanCheck = ListBox.IsMultipleSelectEnable && ListBox.IsMultipleSelect; //初始化该列表项的可视状态 if (ListBox.EnableScrollAnimation) { var index = GetIndexInListBox(); if (index < ListBox.FirstVisibleIndex || index > ListBox.LastVisibleIndex) { VisualField = VisualFieldState.Out; } else { VisualField = VisualFieldState.UpIn; } } //初始化列表项的漂浮状态 _floatingElements.Clear(); var eles = this.Descendants <FrameworkElement>().Where(GetIsFloatingElement); eles.ForEachEx(t => { _floatingElements.Add(t); t.Tag = GetDefaultFloatingEffect(t); }); _floatingElements.ForEach(t => Floating(IsSelected)); }
/// <summary> /// 不会触发状态的改变 /// </summary> /// <param name="value"></param> internal void SetVisualFieldInternal(VisualFieldState value) { if (ListBox.EnableScrollAnimation) { Opacity = value != VisualFieldState.Out ? 1 : 0; } else { Opacity = 1; } _visualField = value; Floating(_visualField != VisualFieldState.Out && IsSelected && CanCheck); }
/// <summary> /// 跳转到指定的状态 /// </summary> /// <param name="visualField"></param> internal void GoToVisualFieldState(VisualFieldState visualField) { Opacity = 1; if (!ListBox.EnableScrollAnimation || DesignerProperties.GetIsInDesignMode(this)) { return; } if (_visualField == VisualFieldState.Out) { //不在可视区域的列表项Opacity设为0,这样当它进入可视区域时,动画效果会更好 Opacity = 0; VisualStateManager.GoToState(this, "OutVisualField", true); } else if (_visualField == VisualFieldState.UpIn) { VisualStateManager.GoToState(this, "UpInVisualField", true); } else { VisualStateManager.GoToState(this, "DownInVisualField", true); } }
/// <summary> /// 不会触发状态的改变 /// </summary> /// <param name="value"></param> internal void SetVisualFieldInternal(VisualFieldState value) { if (ListBox.EnableScrollAnimation) Opacity = value != VisualFieldState.Out ? 1 : 0; else Opacity = 1; _visualField = value; Floating(_visualField != VisualFieldState.Out && IsSelected && CanCheck); }
/// <summary> /// 跳转到指定的状态 /// </summary> /// <param name="visualField"></param> internal void GoToVisualFieldState(VisualFieldState visualField) { Opacity = 1; if (!ListBox.EnableScrollAnimation || DesignerProperties.GetIsInDesignMode(this)) return; if (_visualField == VisualFieldState.Out) { //不在可视区域的列表项Opacity设为0,这样当它进入可视区域时,动画效果会更好 Opacity = 0; VisualStateManager.GoToState(this, "OutVisualField", true); } else if (_visualField == VisualFieldState.UpIn) { VisualStateManager.GoToState(this, "UpInVisualField", true); } else { VisualStateManager.GoToState(this, "DownInVisualField", true); } }