123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using System;
- using System.Collections.Generic;
- using System.Collections.Specialized;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using System.Windows;
- namespace CyberX8_Themes.CustomControls
- {
- public class StepBar : ItemsControl
- {
- #region Private属性
- #endregion
- #region 依赖属性定义
- public int Progress
- {
- get { return (int)GetValue(ProgressProperty); }
- set { SetValue(ProgressProperty, value); }
- }
- public static readonly DependencyProperty ProgressProperty =
- DependencyProperty.Register("Progress", typeof(int), typeof(StepBar), new PropertyMetadata(0, OnProgressChangedCallback, OnProgressCoerceValueCallback));
- private static object OnProgressCoerceValueCallback(DependencyObject d, object baseValue)
- {
- //不让Progress超出边界
- StepBar stepBar = d as StepBar;
- int newValue = Convert.ToInt32(baseValue);
- if (newValue < 0)
- {
- return 0;
- }
- else if (newValue >= stepBar.Items.Count)
- {
- return stepBar.Items.Count - 1;
- }
- return newValue;
- }
- private static void OnProgressChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- }
- #endregion
- #region 依赖属性set get
- #endregion
- #region Constructors
- static StepBar()
- {
- DefaultStyleKeyProperty.OverrideMetadata(typeof(StepBar), new FrameworkPropertyMetadata(typeof(StepBar)));
- }
- #endregion
- #region Override方法
- protected override DependencyObject GetContainerForItemOverride()
- {
- return new StepBarItem();
- }
- protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
- {
- //设置Item的显示数字
- StepBarItem stepBarItem = element as StepBarItem;
- ItemsControl itemsControl = ItemsControl.ItemsControlFromItemContainer(stepBarItem);
- int index = itemsControl.ItemContainerGenerator.IndexFromContainer(stepBarItem);
- stepBarItem.Number = Convert.ToString(++index);
- base.PrepareContainerForItemOverride(element, item);
- }
- protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
- {
- base.OnItemsChanged(e);
- //ItemsControl数量变化时,重新设置各个Item的显示的数字
- for (int i = 0; i < this.Items.Count; i++)
- {
- StepBarItem stepBarItem = this.ItemContainerGenerator.ContainerFromIndex(i) as StepBarItem;
- if (stepBarItem != null)
- {
- int temp = i;
- stepBarItem.Number = Convert.ToString(++temp);
- }
- }
- //进度重新回到第一个
- this.Progress = 0;
- }
- #endregion
- #region Private方法
- #endregion
- }
- }
|