private void ListBox_Tab_SelectionChanged(object sender, SelectionChangedEventArgs e) { ItemInfoUpdate(EditMode.EditTab); TabItemModel selectedItem = (TabItemModel)this.ListBox_Tab.SelectedItem; if (selectedItem != null) { TabStrRefresh(selectedItem.Data.StrList); //selectedItem.Checked = true; } }
private void ButtonEditConfirm_Click(object sender, RoutedEventArgs e) { if (editMode == EditMode.EditString || editMode == EditMode.EditTab) { if (editMode == EditMode.EditTab) { Object tab = ListBox_Tab.SelectedItem; if (tab != null) { TabItemModel item = (TabItemModel)tab; item.Data.Name = TextBox_Name.Text; item.Data.Description = TextBox_Description.Text; item.SetPropertyChanged("Data"); } } else { Object str = ListBox_Str.SelectedItem; if (str != null) { StrItemModel item = (StrItemModel)str; item.Data.Name = TextBox_Name.Text; item.Data.Description = TextBox_Description.Text; item.Data.Text = TextBox_Command.Text; item.SetPropertyChanged("Data"); } } } else { if (editMode == EditMode.AddTab) { CustomStrTab newTab = new CustomStrTab(TextBox_Name.Text); newTab.Description = TextBox_Description.Text; TabList.Add(newTab); TabItemModel newModel = new TabItemModel(newTab); tabListBoxViewModel.ModelCollection.Add(newModel); ListBox_Tab.SelectedItem = newModel; } else { CustomStrData newStr = new CustomStrData(TextBox_Name.Text, TextBox_Description.Text, TextBox_Command.Text); Object tab = ListBox_Tab.SelectedItem; if (tab != null) { TabItemModel item = (TabItemModel)tab; item.Data.StrList.Add(newStr); TabStrRefresh(item.Data.StrList); ListBox_Str.SelectedIndex = item.Data.StrList.Count - 1; } } } }
private void MoveItemToTab(TabItemModel sourceTab, TabItemModel targetTab, List <StrItemModel> strItems) { if (sourceTab is null || targetTab is null || strItems is null) { return; } foreach (StrItemModel item in strItems) { sourceTab.Data.StrList.Remove(item.Data); targetTab.Data.StrList.Add(item.Data); } }
public void TabListRefresh() { ObservableCollection <TabItemModel> TabModelCollection = tabListBoxViewModel.ModelCollection; TabItemModel selectionItem = ListBox_Tab.SelectedItem as TabItemModel; TabModelCollection.Clear(); foreach (CustomStrTab tab in TabList) { TabModelCollection.Add(new TabItemModel(tab)); } if (TabModelCollection.IndexOf(selectionItem) != -1) { ListBox_Tab.SelectedItem = selectionItem; } else { ListBox_Tab.SelectedIndex = 0; } }
private void ListBox_Drop <TItem>(Object sender, DragEventArgs e) where TItem : DragableListModelBase { ListBox listbox = (ListBox)sender; Point pos = e.GetPosition(listbox); HitTestResult result = VisualTreeHelper.HitTest(listbox, pos); if (result == null) { return; } //查詢目標資料 var listBoxItem = FindVisualParent <ListBoxItem>(result.VisualHit); if (listBoxItem == null) { return; } //查詢後設資料 object target = listBoxItem.Content; DragableListModelBase source = null; if (Type.GetType(e.Data.GetFormats()[0]).BaseType == typeof(DragableListModelBase)) { source = e.Data.GetData(e.Data.GetFormats()[0]) as DragableListModelBase; } else { return; } ListBoxViewModel <TItem> viewModel = (ListBoxViewModel <TItem>)listbox.DataContext; if (source.GetType() == target.GetType()) { viewModel.LastSelectModel?.ClearIndicator(); MoveItem <ObservableCollection <TItem>, TItem>(viewModel.ModelCollection, source, target); } //command move to other tab else if (source.GetType() == typeof(StrItemModel) && target.GetType() == typeof(TabItemModel)) { if (tabListBoxViewModel.LastSelectModel != null) { tabListBoxViewModel.LastSelectModel.MoveInIndicator = false; } List <StrItemModel> moveCommandsList = new List <StrItemModel>(); moveCommandsList.Add((StrItemModel)ListBox_Str.SelectedItem); MoveItemToTab((TabItemModel)ListBox_Tab.SelectedItem, (TabItemModel)target, moveCommandsList); TabItemModel selectedItem = (TabItemModel)this.ListBox_Tab.SelectedItem; if (selectedItem != null) { TabStrRefresh(selectedItem.Data.StrList); //selectedItem.Checked = true; } } //tab move to other string (x) else { } }
private void ItemInfoUpdate(EditMode mode) { bool addItem = false; bool isNull = false; switch (mode) { case EditMode.EditTab: TabItemModel tab = (TabItemModel)this.ListBox_Tab.SelectedItem; if (tab != null) { this.TextBox_Command.Text = null; this.TextBox_Command.Visibility = Visibility.Hidden; this.TextBox_Name.Text = tab.Data.Name; this.TextBox_Description.Text = tab.Data.Description; } else { isNull = true; } break; case EditMode.EditString: StrItemModel str = (StrItemModel)this.ListBox_Str.SelectedItem; if (str != null) { this.TextBox_Command.Text = str.Data.Text; this.TextBox_Command.Visibility = Visibility.Visible; this.TextBox_Name.Text = str.Data.Name; this.TextBox_Description.Text = str.Data.Description; } else { isNull = true; } break; case EditMode.AddTab: addItem = true; this.TextBox_Command.Text = ""; this.TextBox_Command.Visibility = Visibility.Hidden; this.TextBox_Name.Text = "New Tab"; this.TextBox_Description.Text = "無"; break; case EditMode.AddString: addItem = true; this.TextBox_Command.Text = ""; this.TextBox_Command.Visibility = Visibility.Visible; this.TextBox_Name.Text = "New String"; this.TextBox_Description.Text = "無"; break; } if (addItem) { TextBox_Name.Focus(); EditApplyIcon.Kind = MaterialDesignThemes.Wpf.PackIconKind.AddThick; EditCancelIcon.Kind = MaterialDesignThemes.Wpf.PackIconKind.CloseThick; } else { EditApplyIcon.Kind = MaterialDesignThemes.Wpf.PackIconKind.CheckBold; EditCancelIcon.Kind = MaterialDesignThemes.Wpf.PackIconKind.ArrowRotateLeft; } if (!isNull) { editMode = mode; } InfoChangeCheck(); }
//FIXME: When command drag to tab and drag back,tab indicator not recovered; private void ListBox_DragOver <TItem>(object sender, DragEventArgs e) where TItem : DragableListModelBase { ListBox listbox = (ListBox)sender; ListBoxViewModel <TItem> viewModel = (ListBoxViewModel <TItem>)listbox.DataContext; Point pos = e.GetPosition(listbox); if (listbox.ActualHeight - pos.Y <= autoScrollThreshold) { //下捲 Border border = (Border)VisualTreeHelper.GetChild(listbox, 0); ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0); scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 1); } else if (pos.Y <= autoScrollThreshold) { //上捲 Border border = (Border)VisualTreeHelper.GetChild(listbox, 0); ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0); scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - 1); } HitTestResult result = VisualTreeHelper.HitTest(listbox, pos); ListBoxItem listBoxItem; if (result != null) { listBoxItem = FindVisualParent <ListBoxItem>(result.VisualHit); } else { Console.WriteLine("Clear Indi"); viewModel.LastSelectModel?.ClearIndicator(); viewModel.LastSelectModel = null; return; } if (listBoxItem == null) { Console.WriteLine("Clear Indi2"); viewModel.LastSelectModel?.ClearIndicator(); //viewModel.LastSelectModel = null; return; } TItem target = (TItem)listBoxItem.Content; DragableListModelBase source; // = e.Data.GetData(typeof(TItem)) as TItem if (Type.GetType(e.Data.GetFormats()[0]).BaseType == typeof(DragableListModelBase)) { source = e.Data.GetData(e.Data.GetFormats()[0]) as DragableListModelBase; } else { return; } if (target == source) { viewModel.LastSelectModel?.ClearIndicator(); viewModel.LastSelectModel = null; if (source.GetType() == typeof(StrItemModel)) { if (tabListBoxViewModel.LastSelectModel != null) { tabListBoxViewModel.LastSelectModel.MoveInIndicator = false; } } return; } else { if (source.GetType() == target.GetType()) { if (target != viewModel.LastSelectModel) { viewModel.LastSelectModel?.ClearIndicator(); if (source.GetType() == typeof(StrItemModel)) { Console.WriteLine("trig"); TabItemModel lastModel = tabListBoxViewModel.LastSelectModel; Console.WriteLine(lastModel); if (lastModel != null) { lastModel.MoveInIndicator = false; } } } viewModel.LastSelectModel = target; int targetIndex = viewModel.ModelCollection.IndexOf(target); int sourceIndex = viewModel.ModelCollection.IndexOf((TItem)source); if (targetIndex > sourceIndex) { target.DragIndicatorDown = true; } else { target.DragIndicatorUp = true; } //if (source.GetType() == typeof(StrItemModel)) //{ // if (tabListBoxViewModel.LastSelectModel != null) // { // tabListBoxViewModel.LastSelectModel.MoveInIndicator = false; // } //} } //command move to other tab else if (source.GetType() == typeof(StrItemModel) && target.GetType() == typeof(TabItemModel)) { strListBoxViewModel.LastSelectModel?.ClearIndicator(); strListBoxViewModel.LastSelectModel = (StrItemModel)source; if (tabListBoxViewModel.LastSelectModel != null) { tabListBoxViewModel.LastSelectModel.MoveInIndicator = false; } tabListBoxViewModel.LastSelectModel = (TabItemModel)(DragableListModelBase)target; Console.WriteLine("Move to other tab" + tabListBoxViewModel.LastSelectModel.Data.Name); tabListBoxViewModel.LastSelectModel.MoveInIndicator = true; } //tab move to other string (x) else { Console.WriteLine("X"); tabListBoxViewModel.LastSelectModel?.ClearIndicator(); tabListBoxViewModel.LastSelectModel = (TabItemModel)source; e.Effects = DragDropEffects.None; } } }