fixed some bugs

This commit is contained in:
NaBian committed 2018-11-11 20:37:44 +08:00
1 parent dec0d37b31
commit 7171398966
11 files changed
+230 -110

No files matched your search

+46 -48
View File
@@ -40,6 +40,14 @@ namespace HandyControl.Controls
private ItemsPresenter _itemsControl;
private int _pageIndex = -1;
private Button _selectedButton;
private DispatcherTimer _updateTimer;
private readonly List<double> _widthList = new List<double>();
#endregion Data
public override void OnApplyTemplate()
@@ -63,7 +71,7 @@ namespace HandyControl.Controls
private void Update()
{
TimerSwitch(AutoRun);
UpdatePageButtons();
UpdatePageButtons(_pageIndex);
}
private void CheckNull()
@@ -99,14 +107,6 @@ namespace HandyControl.Controls
set => SetValue(IsCenterProperty, value);
}
private int _pageIndex;
private Button _selectedButton;
private DispatcherTimer _updateTimer;
private readonly List<double> _widthList = new List<double>();
public Carousel()
{
CommandBindings.Add(new CommandBinding(ControlCommands.Prev, ButtonPrev_OnClick));
@@ -167,24 +167,21 @@ namespace HandyControl.Controls
private void TimerSwitch(bool run)
{
if (!_appliedTemplate) return;
if (run)
if (_updateTimer != null)
{
_updateTimer = new DispatcherTimer
{
Interval = Interval
};
_updateTimer.Tick += UpdateTimer_Tick;
_updateTimer.Start();
_updateTimer.Tick -= UpdateTimer_Tick;
_updateTimer.Stop();
_updateTimer = null;
}
else
if (!run) return;
_updateTimer = new DispatcherTimer
{
if (_updateTimer != null)
{
_updateTimer.Tick -= UpdateTimer_Tick;
_updateTimer.Stop();
_updateTimer = null;
}
}
Interval = Interval
};
_updateTimer.Tick += UpdateTimer_Tick;
_updateTimer.Start();
}
private void UpdateTimer_Tick(object sender, EventArgs e)
@@ -196,40 +193,41 @@ namespace HandyControl.Controls
/// <summary>
/// 更新页按钮
/// </summary>
public void UpdatePageButtons(int? index = null)
public void UpdatePageButtons(int index = -1)
{
if (!_appliedTemplate) return;
if (index == null)
{
var count = Items.Count;
_widthList.Clear();
_widthList.Add(0);
var width = .0;
foreach (FrameworkElement item in Items)
{
item.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
width += item.DesiredSize.Width;
_widthList.Add(width);
}
_itemsControl.Width = _widthList.Last() + ExtendWidth;
_panelPage.Children.Clear();
for (var i = 0; i < count; i++)
_panelPage.Children.Add(CreatePateButton());
var count = Items.Count;
_widthList.Clear();
_widthList.Add(0);
var width = .0;
foreach (FrameworkElement item in Items)
{
item.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
width += item.DesiredSize.Width;
_widthList.Add(width);
}
_itemsControl.Width = _widthList.Last() + ExtendWidth;
_panelPage.Children.Clear();
for (var i = 0; i < count; i++)
{
_panelPage.Children.Add(CreatePateButton());
}
if (index == -1)
{
if (count > 0)
{
var button = _panelPage.Children[0];
button.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent, button));
}
}
else
else if (index >= 0 && index < count)
{
if (index >= 0 && index < _panelPage.Children.Count)
{
var button = _panelPage.Children[(int)index];
button.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent, button));
UpdateItemsPosition();
}
var button = _panelPage.Children[index];
button.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent, button));
UpdateItemsPosition();
}
}