using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using SPC.Kiosk.Base; using SPC.Kiosk.Common; namespace SPC.Kiosk.Common { /// /// ButtonList.xaml에 대한 상호 작용 논리 /// public partial class ButtonList : UserControl { #region [ Members ] /// /// ListItems /// public static readonly DependencyProperty ListItemsProperty = DependencyProperty.Register(nameof(ListItems), typeof(ObservableCollection), typeof(ButtonList), new PropertyMetadata(null, new PropertyChangedCallback(OnListItemsPropertyChanged))); /// /// Command /// public static readonly DependencyProperty CommandProperty = DependencyProperty.Register(nameof(Command), typeof(ICommand), typeof(ButtonList), new UIPropertyMetadata(null)); /// /// DropCommand /// public static readonly DependencyProperty CircleCommandProperty = DependencyProperty.Register(nameof(CircleCommand), typeof(ICommand), typeof(ButtonList), new UIPropertyMetadata(null)); /// /// DropCommand /// public static readonly DependencyProperty DropCommandProperty = DependencyProperty.Register(nameof(DropCommand), typeof(ICommand), typeof(ButtonList), new UIPropertyMetadata(null)); /// /// Columns Count /// public static readonly DependencyProperty ColumnCountProperty = DependencyProperty.Register(nameof(ColumnCount), typeof(int), typeof(ButtonList), new PropertyMetadata(3)); /// /// Page Stack Orientation /// public static readonly DependencyProperty StackOrientationProperty = DependencyProperty.Register(nameof(StackOrientation), typeof(Orientation), typeof(ButtonList), new PropertyMetadata(Orientation.Vertical, new PropertyChangedCallback(OnStackOrientationPropertyChanged))); /// /// Vertical Scroll Offset /// public static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.Register(nameof(VerticalOffset), typeof(double), typeof(ButtonList), new PropertyMetadata(0d, new PropertyChangedCallback(OnVerticalOffsetPropertyChanged))); /// /// Horizontal Scroll Offset /// public static readonly DependencyProperty HorizontalOffsetProperty = DependencyProperty.Register(nameof(HorizontalOffset), typeof(double), typeof(ButtonList), new PropertyMetadata(0d, new PropertyChangedCallback(OnHorizontalOffsetPropertyChanged))); /// /// Rows Count /// public static readonly DependencyProperty RowCountProperty = DependencyProperty.Register(nameof(RowCount), typeof(int), typeof(ButtonList), new PropertyMetadata(1)); /// /// ItemWidth /// public static readonly DependencyProperty ItemWidthProperty = DependencyProperty.Register(nameof(ItemWidth), typeof(double), typeof(ButtonList), new PropertyMetadata(double.NaN)); /// /// ItemHeight /// public static readonly DependencyProperty ItemHeightProperty = DependencyProperty.Register(nameof(ItemHeight), typeof(double), typeof(ButtonList), new PropertyMetadata(double.NaN)); /// /// Default PageNo /// public static readonly DependencyProperty DefaultPageNoProperty = DependencyProperty.Register(nameof(DefaultPageNo), typeof(int), typeof(ButtonList), new PropertyMetadata(0, new PropertyChangedCallback(OnDefaultPageNoPropertyChanged))); /// /// TextPosition /// public static readonly DependencyProperty TextPositionProperty = DependencyProperty.Register(nameof(TextPosition), typeof(TextPosition), typeof(ButtonList), new PropertyMetadata(TextPosition.InnerButton)); /// /// ClickSend /// public static readonly DependencyProperty ClickSendProperty = DependencyProperty.Register(nameof(ClickSend), typeof(bool), typeof(ButtonList), new PropertyMetadata(false, new PropertyChangedCallback(OnClickSendPropertyChanged))); /// /// BaseGrid /// public static readonly DependencyProperty BaseGridProperty = DependencyProperty.Register(nameof(BaseGrid), typeof(string), typeof(ButtonList), new PropertyMetadata(string.Empty)); /// /// ReciveElement /// public static readonly DependencyProperty ReciveElementProperty = DependencyProperty.Register(nameof(ReciveElement), typeof(string), typeof(ButtonList), new PropertyMetadata(string.Empty)); /// /// DefaultItem /// public static readonly DependencyProperty DefaultItemProperty = DependencyProperty.Register(nameof(DefaultItem), typeof(AnimationButton), typeof(ButtonList), new PropertyMetadata(null)); /// /// DefaultIndex /// public static readonly DependencyProperty DefaultIndexProperty = DependencyProperty.Register(nameof(DefaultIndex), typeof(int), typeof(ButtonList), new PropertyMetadata(0, new PropertyChangedCallback(OnDefaultIndexPropertyChanged))); /// /// Display Language /// public static readonly DependencyProperty DisplayLanguagePropery = DependencyProperty.Register(nameof(DisplayLanguage), typeof(SupportLanguageType), typeof(ButtonList), new PropertyMetadata(SupportLanguageType.ko, new PropertyChangedCallback(OnDisplayLanguageProperyChanged))); /// /// Drag Enable Flag /// public static readonly DependencyProperty DragEnablePropery = DependencyProperty.Register(nameof(DragEnable), typeof(bool), typeof(ButtonList), new PropertyMetadata(false, new PropertyChangedCallback(OnDragEnableProperyChanged))); /// /// AutoToggle Flag /// public static readonly DependencyProperty AutoTogglePropery = DependencyProperty.Register(nameof(AutoToggle), typeof(bool), typeof(ButtonList), new PropertyMetadata(false, new PropertyChangedCallback(OnAutoToggleProperyChanged))); /// /// Selected Item Switch On Flag /// public static readonly DependencyProperty SelectOnPropery = DependencyProperty.Register(nameof(SelectOn), typeof(bool), typeof(ButtonList), new PropertyMetadata(false, new PropertyChangedCallback(OnSelectOnProperyChanged))); private int TargetPageNo = 0; private double mouseDownYposition = -1; private double mouseDownXposition = -1; private bool MoseDown = false; /// /// Drag Enable Flag /// public bool DragEnable { get { return (bool)GetValue(DragEnablePropery); } set { SetValue(DragEnablePropery, value); } } /// /// AutoToggle Flag /// public bool AutoToggle { get { return (bool)GetValue(AutoTogglePropery); } set { SetValue(AutoTogglePropery, value); } } /// /// Selected Item Switch On Flag /// public bool SelectOn { get { return (bool)GetValue(SelectOnPropery); } set { SetValue(SelectOnPropery, value); } } /// /// ListItems /// public ObservableCollection ListItems { get { return (ObservableCollection)GetValue(ListItemsProperty); } set { SetValue(ListItemsProperty, value); } } /// /// Command /// public ICommand Command { get { return (ICommand)GetValue(CommandProperty); } set { SetValue(CommandProperty, value); } } /// /// Circle Clicked Command /// public ICommand CircleCommand { get { return (ICommand)GetValue(CircleCommandProperty); } set { SetValue(CircleCommandProperty, value); } } /// /// DropCommand /// public ICommand DropCommand { get { return (ICommand)GetValue(DropCommandProperty); } set { SetValue(DropCommandProperty, value); } } /// /// StackOrientation /// public Orientation StackOrientation { get { return (Orientation)GetValue(StackOrientationProperty); } set { SetValue(StackOrientationProperty, value); } } /// /// ColumnCount /// public int ColumnCount { get { return (int)GetValue(ColumnCountProperty); } set { SetValue(ColumnCountProperty, value); } } /// /// RowCount /// public int RowCount { get { return (int)GetValue(RowCountProperty); } set { SetValue(RowCountProperty, value); } } /// /// ItemWidth /// public double ItemWidth { get { return (double)GetValue(ItemWidthProperty); } set { SetValue(ItemWidthProperty, value); } } /// /// ItemHeight /// public double ItemHeight { get { return (double)GetValue(ItemHeightProperty); } set { SetValue(ItemHeightProperty, value); } } /// /// DefaultPageNo /// public int DefaultPageNo { get { return (int)GetValue(DefaultPageNoProperty); } set { SetValue(DefaultPageNoProperty, value); } } /// /// TextPosition /// public TextPosition TextPosition { get { return (TextPosition)GetValue(TextPositionProperty); } set { SetValue(TextPositionProperty, value); } } /// /// DefaultItem /// public AnimationButton DefaultItem { get { return (AnimationButton)GetValue(DefaultItemProperty); } set { SetValue(DefaultItemProperty, value); } } /// /// DefaultIndex /// public int DefaultIndex { get { return (int)GetValue(DefaultIndexProperty); } set { SetValue(DefaultIndexProperty, value); } } /// /// ClickSend /// public bool ClickSend { get { return (bool)GetValue(ClickSendProperty); } set { SetValue(ClickSendProperty, value); } } /// /// ReciveElement /// public string ReciveElement { get { return (string)GetValue(ReciveElementProperty); } set { SetValue(ReciveElementProperty, value); } } /// /// BaseGrid /// public string BaseGrid { get { return (string)GetValue(BaseGridProperty); } set { SetValue(BaseGridProperty, value); } } /// /// VerticalOffset /// public double VerticalOffset { get { return (double)GetValue(VerticalOffsetProperty); } set { SetValue(VerticalOffsetProperty, value); } } /// /// HorizontalOffset /// public double HorizontalOffset { get { return (double)GetValue(HorizontalOffsetProperty); } set { SetValue(HorizontalOffsetProperty, value); } } /// /// Display Language /// public SupportLanguageType DisplayLanguage { get { return (SupportLanguageType)GetValue(DisplayLanguagePropery); } set { SetValue(DisplayLanguagePropery, value); } } #region [ RoutedEvent 'MouseClicked' ] /// /// MouseClicked Event /// public static readonly RoutedEvent MouseClickedEvent = EventManager.RegisterRoutedEvent(nameof(MouseClicked), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonList)); /// /// MouseClicked Routed Event Handler /// public event RoutedEventHandler MouseClicked { add { AddHandler(MouseClickedEvent, value); } remove { RemoveHandler(MouseClickedEvent, value); } } #endregion RoutedEvent 'MouseClicked' #region [ RoutedEvent 'CircleClicked' ] /// /// CircleClicked Event /// public static readonly RoutedEvent CircleClickedEvent = EventManager.RegisterRoutedEvent(nameof(CircleClicked), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonList)); /// /// MouseClicked Routed Event Handler /// public event RoutedEventHandler CircleClicked { add { AddHandler(CircleClickedEvent, value); } remove { RemoveHandler(CircleClickedEvent, value); } } #endregion RoutedEvent 'CircleClicked' #region [ RoutedEvent 'ItemDrop' ] /// /// CircleClicked Event /// public static readonly RoutedEvent ItemDropEvent = EventManager.RegisterRoutedEvent(nameof(ItemDrop), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonList)); /// /// MouseClicked Routed Event Handler /// public event RoutedEventHandler ItemDrop { add { AddHandler(ItemDropEvent, value); } remove { RemoveHandler(ItemDropEvent, value); } } #endregion RoutedEvent 'ItemDrop' #endregion Members #region [ Ctor & Etc ] /// /// Ctor /// public ButtonList() { InitializeComponent(); this.Unloaded += ButtonList_Unloaded; } #endregion Ctor & Etc #region [ Methods ] /// /// Default Item Set By Index /// /// public void SetDefaultItem(int _itemIndex) { if (this.FindName(string.Format("ButtonListItem{0}", _itemIndex)) is AnimationButton findItem) { DefaultItem = findItem; findItem.Switch = SelectOn; } } /// /// Reset Default Item /// /// public void ResetDefaultItem(int _itemIndex) { if (this.FindName(string.Format("ButtonListItem{0}", _itemIndex)) is AnimationButton findItem) { findItem.Switch = false; } } /// /// Raise MouseClicked Event /// private void RaiseMouseClickedEvent(object _sender) { //Command Excute if (Command != null && Command.CanExecute(_sender)) { Command.Execute(_sender); } RoutedEventArgs newEventArgs = new RoutedEventArgs(ButtonList.MouseClickedEvent, _sender); RaiseEvent(newEventArgs); } /// /// Raise CircleClicked Event /// private void RaiseCircleClickedEvent(object _sender) { if (CircleCommand != null && CircleCommand.CanExecute(_sender)) { CircleCommand.Execute(_sender); } RoutedEventArgs newEventArgs = new RoutedEventArgs(ButtonList.CircleClickedEvent, _sender); RaiseEvent(newEventArgs); } private void RaiseItemDropEvent(object sender) { if (DropCommand != null && DropCommand.CanExecute(sender)) { DropCommand.Execute(sender); } RoutedEventArgs newEventArgs = new RoutedEventArgs(ButtonList.ItemDropEvent, sender); RaiseEvent(newEventArgs); } private static void ItemsButtonCreate(ButtonList _target, object _listItems) { try { if (_listItems is ObservableCollection lstItems && lstItems.Count > 0) { int itemCnt = 0; int PageCount = 0; int RowsCount = 0; Grid PageGrid = null; StackPanel PageStak = null; Grid RowGrid = null; StackPanel RowStack = null; foreach (var aItem in lstItems) { if (itemCnt % (_target.ColumnCount * _target.RowCount) == 0) { PageGrid = new Grid { Background = new SolidColorBrush(Colors.Transparent), Width = _target.Width, Height = _target.Height, HorizontalAlignment = HorizontalAlignment.Right, Name = string.Format("PageGrid{0}", PageCount), }; PageGrid.IsEnabled = PageCount.Equals(_target.DefaultPageNo); PageGrid.Width = _target.Width; PageGrid.Height = _target.RowCount * _target.ItemHeight; _target.ReregisterName(string.Format("PageGrid{0}", PageCount), PageGrid); PageStak = new StackPanel { Background = new SolidColorBrush(Colors.Transparent), HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Orientation = Orientation.Vertical, Name = string.Format("PageStak{0}", PageCount) }; _target.ReregisterName(string.Format("PageStak{0}", PageCount), PageStak); } if (itemCnt % _target.ColumnCount == 0) { RowGrid = new Grid { Background = new SolidColorBrush(Colors.Transparent), Width = _target.Width }; RowStack = new StackPanel { Background = new SolidColorBrush(Colors.Transparent), HorizontalAlignment = HorizontalAlignment.Center, Orientation = Orientation.Horizontal }; if (!_target.ItemHeight.Equals(double.NaN)) RowStack.Height = _target.ItemHeight; RowStack.Name = string.Format("RowStack{0}", RowsCount); _target.ReregisterName(string.Format("RowStack{0}", RowsCount), RowStack); RowGrid.Children.Add(RowStack); } var ItemStack = new StackPanel { Background = new SolidColorBrush(Colors.Transparent), Width = _target.ItemWidth, Height = _target.ItemHeight }; if (aItem.BadgeHeight > 0) { var bageGrid = new Grid { Width = _target.ItemWidth, Height = aItem.BadgeHeight, }; var bageStack = new StackPanel { Background = new SolidColorBrush(Colors.Transparent), Orientation = aItem.BadgeOrientation, HorizontalAlignment = aItem.BadgeHorizontalAlignment, VerticalAlignment = aItem.BadgeVerticalAlignment, }; if (aItem.BadgeImages is List) { foreach (var bageImage in aItem.BadgeImages) { var sourceImage = ResourceManager.GetBitmapImage(bageImage); if (sourceImage !=null) { var aBadgeImage = new Image() { Width = sourceImage.Width, Height = sourceImage.Height, Source = sourceImage, HorizontalAlignment = aItem.BadgeHorizontalAlignment, }; bageStack.Children.Add(aBadgeImage); } } } bageStack.Name = string.Format("BageStack{0}", itemCnt); _target.ReregisterName(string.Format("BageStack{0}", itemCnt), bageStack); bageGrid.Children.Add(bageStack); ItemStack.Children.Add(bageGrid); } var aItemButton = new AnimationButton(); if (aItem.DataParameter.Width.Equals(double.NaN) || aItem.DataParameter.Width.Equals(0d)) { aItem.DataParameter.Width = _target.ItemWidth; } Grid baseTextGrid = null; StackPanel textStack = null; MutiLanguageTextBlock baseText = null; MutiLanguageTextBlock additionText = null; if (!_target.TextPosition.Equals(TextPosition.InnerButton)) { baseTextGrid = new Grid { Background = new SolidColorBrush(Colors.Transparent) }; textStack = new StackPanel { Background = new SolidColorBrush(Colors.Transparent) }; baseText = new MutiLanguageTextBlock { FontSize = aItem.BaseTextBlock.TextSize, Background = new SolidColorBrush(Colors.Transparent) }; ResourceManager.SetBrush(baseText, "Foreground", aItem.BaseTextBlock.TextBrush); baseText.Width = aItem.BaseTextBlock.Width; baseText.Height = aItem.BaseTextBlock.Height; baseText.HorizontalAlignment = aItem.BaseTextBlock.TextHorizontalAlignment; baseText.VerticalAlignment = aItem.BaseTextBlock.TextVerticalAlignment; baseText.TextAlignment = aItem.BaseTextBlock.TextAlignment; baseText.Margin = aItem.BaseTextBlock.TextMargin; baseText.AutoTextTrim = aItem.BaseTextBlock.AutoTextTrim; baseText.TextWrapping = aItem.BaseTextBlock.TextWrapping; baseText.FontWeight = aItem.BaseTextBlock.TextWeight; baseText.FontFamily = new FontFamily(aItem.BaseTextBlock.TextFontFamily); baseText.TextWrapping = TextWrapping.Wrap; baseText.MultiLanguage = aItem.BaseTextBlock.LanguageData; baseText.DisplayLanguage = _target.DisplayLanguage; additionText = new MutiLanguageTextBlock { FontSize = aItem.AdditionTextBlock.TextSize, Background = new SolidColorBrush(Colors.Transparent) }; ResourceManager.SetBrush(additionText, "Foreground", aItem.AdditionTextBlock.TextBrush); additionText.Width = aItem.AdditionTextBlock.Width; additionText.Height = aItem.AdditionTextBlock.Height; additionText.HorizontalAlignment = aItem.AdditionTextBlock.TextHorizontalAlignment; additionText.VerticalAlignment = aItem.AdditionTextBlock.TextVerticalAlignment; additionText.TextAlignment = aItem.AdditionTextBlock.TextAlignment; additionText.TextWrapping = aItem.AdditionTextBlock.TextWrapping; additionText.Margin = aItem.AdditionTextBlock.TextMargin; additionText.AutoTextTrim = aItem.AdditionTextBlock.AutoTextTrim; additionText.FontWeight = aItem.AdditionTextBlock.TextWeight; additionText.FontFamily = new FontFamily(aItem.AdditionTextBlock.TextFontFamily); additionText.TextWrapping = TextWrapping.Wrap; additionText.MultiLanguage = aItem.AdditionTextBlock.LanguageData; additionText.DisplayLanguage = _target.DisplayLanguage; } switch (_target.TextPosition) { case TextPosition.Left: baseTextGrid.Width = (_target.ItemWidth - aItem.DataParameter.Width) < 0 ? 0 : _target.ItemWidth - aItem.DataParameter.Width; baseTextGrid.Height = _target.ItemHeight; ItemStack.Orientation = Orientation.Horizontal; textStack.HorizontalAlignment = HorizontalAlignment.Left; textStack.VerticalAlignment = VerticalAlignment.Center; break; case TextPosition.Right: baseTextGrid.Width = (_target.ItemWidth - aItem.DataParameter.Width) < 0 ? 0 : _target.ItemWidth - aItem.DataParameter.Width; baseTextGrid.Height = _target.ItemHeight; ItemStack.Orientation = Orientation.Horizontal; textStack.HorizontalAlignment = HorizontalAlignment.Right; textStack.VerticalAlignment = VerticalAlignment.Center; break; case TextPosition.Top: baseTextGrid.Width = _target.ItemWidth; baseTextGrid.Height = (_target.ItemHeight - aItem.DataParameter.Height) < 0 ? 0 : _target.ItemHeight - aItem.DataParameter.Height; ItemStack.Orientation = Orientation.Vertical; textStack.HorizontalAlignment = HorizontalAlignment.Center; textStack.VerticalAlignment = VerticalAlignment.Bottom; break; case TextPosition.Bottom: baseTextGrid.Width = _target.ItemWidth; baseTextGrid.Height = (_target.ItemHeight - aItem.DataParameter.Height) < 0 ? 0 : _target.ItemHeight - aItem.DataParameter.Height; ItemStack.Orientation = Orientation.Vertical; textStack.HorizontalAlignment = HorizontalAlignment.Center; textStack.VerticalAlignment = VerticalAlignment.Top; break; } aItemButton.VerticalAlignment = VerticalAlignment.Center; aItemButton.HorizontalAlignment = HorizontalAlignment.Center; aItemButton.DataParameter = aItem; aItemButton.DisplayLanguage = _target.DisplayLanguage; aItemButton.BaseGrid = _target.BaseGrid; aItemButton.ReciveElement = _target.ReciveElement; aItemButton.ClickSend = !string.IsNullOrEmpty(_target.BaseGrid) && !string.IsNullOrEmpty(_target.ReciveElement); aItemButton.Name = string.Format("ButtonListItem{0}", itemCnt); _target.ReregisterName(string.Format("ButtonListItem{0}", itemCnt), aItemButton); ItemStack.Name = string.Format("ItemStack{0}", itemCnt); _target.ReregisterName(string.Format("ItemStack{0}", itemCnt), ItemStack); switch (_target.TextPosition) { case TextPosition.Left: case TextPosition.Top: textStack.Children.Add(baseText); textStack.Children.Add(additionText); baseTextGrid.Children.Add(textStack); ItemStack.Children.Add(baseTextGrid); ItemStack.Children.Add(aItemButton); break; case TextPosition.Right: case TextPosition.Bottom: ItemStack.Children.Add(aItemButton); textStack.Children.Add(baseText); textStack.Children.Add(additionText); baseTextGrid.Children.Add(textStack); ItemStack.Children.Add(baseTextGrid); break; default: ItemStack.Children.Add(aItemButton); break; } RowStack.Children.Add(ItemStack); itemCnt++; if (itemCnt % _target.ColumnCount == 0) { PageStak.Children.Add(RowGrid); RowsCount++; } if (itemCnt % (_target.ColumnCount * _target.RowCount) == 0) { PageGrid.Children.Add(PageStak); _target.MainStack.Children.Add(PageGrid); PageCount++; } } if (itemCnt % _target.ColumnCount != 0) { for (int i = 0; i < _target.ColumnCount - (itemCnt % _target.ColumnCount); i++) { var ItemStack = new StackPanel { Background = new SolidColorBrush(Colors.Transparent), Width = _target.ItemWidth, Height = _target.ItemHeight }; RowStack.Children.Add(ItemStack); } PageStak.Children.Add(RowGrid); } if (itemCnt % (_target.ColumnCount * _target.RowCount) != 0) { PageGrid.Children.Add(PageStak); _target.MainStack.Children.Add(PageGrid); } } } catch (Exception ex) { CommonLog.ErrorLogWrite(_target, "ItemsButtonCreate()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// Events Set /// public void GridEventsSet() { try { MainGrid.PreviewMouseDown += Grid_PreviewMouseDown; MainGrid.PreviewMouseUp += Grid_PreviewMouseUp; foreach (Grid pageGrid in this.MainStack.Children) { foreach (StackPanel aPageStack in pageGrid.Children) { foreach (Grid aRowGrid in aPageStack.Children) { foreach (StackPanel sRowStack in aRowGrid.Children) { foreach (StackPanel ItemStack in sRowStack.Children) { foreach (var aItem in ItemStack.Children) { if (aItem is AnimationButton ItemContent) { ItemContent.MouseClicked += ItemContent_MouseClicked; ItemContent.CircleClicked += ItemContent_CircleClicked; ItemContent.ItemDrop += ItemContent_ItemDrop; ItemContent.SendStart += ItemContent_SendStart; ItemContent.SendEnd += ItemContent_SendEnd; } } } } } } } } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "GridEventsSet()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// Events Remove /// public void GridEventsRemove() { try { MainGrid.PreviewMouseDown -= Grid_PreviewMouseDown; MainGrid.PreviewMouseUp -= Grid_PreviewMouseUp; foreach (Grid pageGrid in this.MainStack.Children) { foreach (StackPanel aPageStack in pageGrid.Children) { foreach (Grid aRowGrid in aPageStack.Children) { foreach (StackPanel sRowStack in aRowGrid.Children) { foreach (StackPanel ItemStack in sRowStack.Children) { foreach (var aItem in ItemStack.Children) { if (aItem is AnimationButton ItemContent) { ItemContent.MouseClicked -= ItemContent_MouseClicked; ItemContent.CircleClicked -= ItemContent_CircleClicked; ItemContent.ItemDrop -= ItemContent_ItemDrop; ItemContent.SendStart -= ItemContent_SendStart; ItemContent.SendEnd -= ItemContent_SendEnd; } } ItemStack.Children.Clear(); } sRowStack.Children.Clear(); } aRowGrid.Children.Clear(); } aPageStack.Children.Clear(); } pageGrid.Children.Clear(); } this.MainStack.Children.Clear(); } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "GridEventsRemove()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// Set Button Parameter /// public void SetButtonParameter() { try { foreach (Grid pageGrid in this.MainStack.Children) { foreach (StackPanel aPageStack in pageGrid.Children) { foreach (Grid aRowGrid in aPageStack.Children) { foreach (StackPanel sRowStack in aRowGrid.Children) { foreach (StackPanel ItemStack in sRowStack.Children) { foreach (var aItem in ItemStack.Children) { if (aItem is AnimationButton ItemContent) { ItemContent.ClickSend = this.ClickSend; ItemContent.AutoToggle = this.AutoToggle; ItemContent.DragEnable = this.DragEnable; } } } } } } } } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "SetButtonParameter()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } /// /// PageChange /// /// /// public void ChangePageTo( int _toPageNo) { try { var fromOffset = 0d; var toOffset = 0d; var totalTime = 0.3; if (this.MainStack.Orientation.Equals(Orientation.Horizontal)) { fromOffset = this.MainScroll.HorizontalOffset; toOffset = this.Width * _toPageNo; totalTime = Math.Abs(toOffset - fromOffset) / (this.Width) * totalTime; } else { fromOffset = this.MainScroll.VerticalOffset; toOffset = this.ItemHeight * this.RowCount * _toPageNo; totalTime = Math.Abs(toOffset - fromOffset) / (this.ItemHeight * this.RowCount) * totalTime; } var scrollAnimation = Animations.GetScrollAnimation(this, this.MainStack.Orientation, fromOffset, toOffset, totalTime); if (scrollAnimation != null) { scrollAnimation.Completed += ScrollAnimation_Completed; scrollAnimation.Begin(); } TargetPageNo = _toPageNo; } catch (Exception ex) { CommonLog.ErrorLogWrite(this, "ChangePageTo()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } private void ScrollAnimation_Completed(object sender, EventArgs e) { var targetGrid = this.FindName(string.Format("PageGrid{0}", TargetPageNo)) ; if (targetGrid is Grid selectGrid) { DefaultPageNo = TargetPageNo; selectGrid.IsEnabled = true; } } #endregion Methods #region [ Event Handlers ] private void ButtonList_Unloaded(object sender, RoutedEventArgs e) { this.MainStack.Children.Clear(); this.ListItems = null; } private static void OnDisplayLanguageProperyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { try { if (e.NewValue != null && !e.NewValue.Equals(e.OldValue)) { var target = d as ButtonList; foreach (Grid pageGrid in target.MainStack.Children) { foreach (StackPanel aPageStack in pageGrid.Children) { foreach (Grid aRowGrid in aPageStack.Children) { foreach (StackPanel sRowStack in aRowGrid.Children) { foreach (StackPanel ItemStack in sRowStack.Children) { foreach (var aItem in ItemStack.Children) { if (aItem is AnimationButton ItemContent) { ItemContent.DisplayLanguage = (SupportLanguageType)e.NewValue; } else if (aItem is Grid textGrid) { foreach (StackPanel textStack in textGrid.Children) { foreach (var aTextItem in textStack.Children) { if (aTextItem is MutiLanguageTextBlock textItem) { textItem.DisplayLanguage = (SupportLanguageType)e.NewValue; } } } } } } } } } } } } catch (Exception ex) { CommonLog.ErrorLogWrite(d, "OnDisplayLanguageProperyChanged()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); } } private static void OnDefaultPageNoPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != null) { var target = d as ButtonList; target.ChangePageTo((int)e.NewValue); } } private static void OnStackOrientationPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != e.OldValue) { var target = d as ButtonList; target.MainStack.Orientation = (Orientation)e.NewValue; switch ((Orientation)e.NewValue) { case Orientation.Horizontal: target.MainScroll.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; target.MainScroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; break; case Orientation.Vertical: target.MainScroll.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; target.MainScroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; break; } } } private static void OnHorizontalOffsetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != e.OldValue) { var target = d as ButtonList; target.MainScroll.ScrollToHorizontalOffset((double)e.NewValue); } } private static void OnVerticalOffsetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != e.OldValue) { var target = d as ButtonList; target.MainScroll.ScrollToVerticalOffset((double)e.NewValue); } } private static void OnListItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue!=null && !e.NewValue.Equals(e.OldValue)) { var target = d as ButtonList; target.GridEventsRemove(); ItemsButtonCreate(target, e.NewValue); target.UpdateLayout(); CommonFunction.ReregisterName(target.Parent as FrameworkElement, target.Name, target); target.GridEventsSet(); target.SetDefaultItem(target.DefaultIndex); } } private static void OnDefaultIndexPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var target = d as ButtonList; if (!e.NewValue.Equals(e.OldValue)) { if (e.OldValue != null) { target.ResetDefaultItem((int)e.OldValue); } if (target.ListItems != null && target.ListItems.Count > 0 && (int)e.NewValue > -1) { target.SetDefaultItem((int)e.NewValue); target.DefaultPageNo = (int)e.NewValue / (target.ColumnCount * target.RowCount); } } } private static void OnClickSendPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!e.NewValue.Equals(e.OldValue)) { var target = d as ButtonList; target.SetButtonParameter(); } } private static void OnDragEnableProperyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!e.NewValue.Equals(e.OldValue)) { var target = d as ButtonList; target.SetButtonParameter(); } } private static void OnAutoToggleProperyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!e.NewValue.Equals(e.OldValue)) { var target = d as ButtonList; target.SetButtonParameter(); } } private static void OnSelectOnProperyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue !=null) { var target = d as ButtonList; if (target.FindName(string.Format("ButtonListItem{0}", target.DefaultIndex)) is AnimationButton findItem) { findItem.Switch=(bool)e.NewValue; } } } private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e) { var requstGrid = sender as Grid; mouseDownXposition = e.GetPosition(sender as Grid).X; mouseDownYposition = e.GetPosition(sender as Grid).Y; MoseDown = true; } private void Grid_PreviewMouseUp(object sender, MouseButtonEventArgs e) { if (!MoseDown) return; var requstGrid = sender as Grid; var curMouseXposition = e.GetPosition(requstGrid).X; var curMouseYposition = e.GetPosition(requstGrid).Y; if (this.StackOrientation.Equals(Orientation.Horizontal)) { if (!mouseDownXposition.Equals(-1) && (mouseDownXposition - curMouseXposition) > 50) { if (this.DefaultPageNo < this.MainStack.Children.Count - 1) this.DefaultPageNo++; } else if (!mouseDownXposition.Equals(-1) && (mouseDownXposition - curMouseXposition) < -50) { if (this.DefaultPageNo > 0) this.DefaultPageNo--; } } else { if (!mouseDownYposition.Equals(-1) && (mouseDownYposition - curMouseYposition) > 50) { if (this.DefaultPageNo < this.MainStack.Children.Count - 1) this.DefaultPageNo++; } else if (!mouseDownYposition.Equals(-1) && (mouseDownYposition - curMouseYposition) < -50) { if (this.DefaultPageNo > 0) this.DefaultPageNo--; } } mouseDownXposition = curMouseXposition; mouseDownYposition = curMouseYposition; MoseDown = false; } private void ItemContent_MouseClicked(object sender, RoutedEventArgs e) { RaiseMouseClickedEvent(e.OriginalSource); } private void ItemContent_CircleClicked(object sender, RoutedEventArgs e) { RaiseCircleClickedEvent(e.OriginalSource); } private void ItemContent_ItemDrop(object sender, RoutedEventArgs e) { RaiseItemDropEvent(e.OriginalSource); } private void ItemContent_SendEnd(object sender, RoutedEventArgs e) { this.IsEnabled = true; } private void ItemContent_SendStart(object sender, RoutedEventArgs e) { this.IsEnabled = false; } #endregion Event Handlers } }