public void SetData(Control ow, ListBox listbox, IList list, LVDMHelper helper, MenuBinds mbinds = null) { try { Owner = ow; listBox = listbox; dataList = list ?? listbox.Items; hlp = helper; MenuBinds mBinds = mbinds ?? new MenuBinds(); //マウスイベント関係 this.listBox.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(listBox_PreviewMouseLeftButtonUp); this.listBox.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(listBox_PreviewMouseLeftButtonDown); ViewUtil.ResetItemContainerStyle(listbox); listbox.ItemContainerStyle.Setters.Add(new EventSetter(Mouse.MouseEnterEvent, new MouseEventHandler(listBoxItem_MouseEnter))); //移動などのアクションはBoxExchangeEditorのものをそのまま使用する。 bx = new BoxExchangeEditor { TargetBox = listBox, TargetItemsSource = dataList }; this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.TopItem, (sender, e) => ItemsAction(() => bx.button_Top_Click(null, null)))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.UpItem, (sender, e) => ItemsAction(() => bx.button_Up_Click(null, null)))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.DownItem, (sender, e) => ItemsAction(() => bx.button_Down_Click(null, null)))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.BottomItem, (sender, e) => ItemsAction(() => bx.button_Bottom_Click(null, null)))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.SaveOrder, SaveOrder_handler, (sender, e) => e.CanExecute = NotSaved == true)); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.RestoreOrder, (sender, e) => hlp.RestoreOrder(), (sender, e) => e.CanExecute = NotSaved == true)); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.DragCancel, (sender, e) => DragRelease())); mBinds.SetCommandToButton(button_top, EpgCmds.TopItem); mBinds.SetCommandToButton(button_up, EpgCmds.UpItem); mBinds.SetCommandToButton(button_down, EpgCmds.DownItem); mBinds.SetCommandToButton(button_bottom, EpgCmds.BottomItem); mBinds.SetCommandToButton(button_saveItemOrder, EpgCmds.SaveOrder); mBinds.SetCommandToButton(button_reloadItem, EpgCmds.RestoreOrder); mBinds.AddInputCommand(EpgCmds.DragCancel);//アイテムのドラッグキャンセル if (mbinds == null) { mBinds.ResetInputBindings(this.Owner, this.listBox); } //コマンドだと、DragCancelしない場合に、CanExecuteを割り当てても、Handled=falseにしても、 //Keygestureが先へ伝搬してくれないので、対処療法的だけど先に処理してしまうことにする。コマンドの意味無い‥。 listBox.PreviewKeyDown += new KeyEventHandler((sender, e) => { if (Keyboard.Modifiers == ModifierKeys.None) { switch (e.Key) { case Key.Escape: if (_onDrag == true) { EpgCmds.DragCancel.Execute(null, null); //this.listBox.Items.Refresh();//壊したバインディングを修復する。モタツキ感があるので放置する。 e.Handled = true; } break; } } }); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public void SetData(Control ow, ListBox listbox, IList list, LVDMHelper helper, MenuBinds mbinds = null) { try { Owner = ow; listBox = listbox; dataList = list; hlp = helper; MenuBinds mBinds = (mbinds != null ? mbinds : new MenuBinds()); //this.listBox.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(listBox_PreviewMouseLeftButtonUp); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.UpItem, (sender, e) => MoveItem(-1))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.DownItem, (sender, e) => MoveItem(1))); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.SaveOrder, SaveOrder_handler, (sender, e) => e.CanExecute = NotSaved == true)); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.RestoreOrder, (sender, e) => hlp.RestoreOrder(), (sender, e) => e.CanExecute = NotSaved == true)); this.Owner.CommandBindings.Add(new CommandBinding(EpgCmds.DragCancel, (sender, e) => DragRelease())); mBinds.SetCommandToButton(button_up, EpgCmds.UpItem); mBinds.SetCommandToButton(button_down, EpgCmds.DownItem); mBinds.SetCommandToButton(button_saveItemOrder, EpgCmds.SaveOrder); mBinds.SetCommandToButton(button_reloadItem, EpgCmds.RestoreOrder); mBinds.AddInputCommand(EpgCmds.DragCancel);//アイテムのドラッグキャンセル if (mbinds == null) { mBinds.ResetInputBindings(this.Owner, this.listBox); } //コマンドだと、DragCancelしない場合に、CanExecuteを割り当てても、Handled=falseにしても、 //Keygestureが先へ伝搬してくれないので、対処療法的だけど先に処理してしまうことにする。コマンドの意味無い‥。 listBox.PreviewKeyDown += new KeyEventHandler((sender, e) => { if (Keyboard.Modifiers == ModifierKeys.None) { switch (e.Key) { case Key.Escape: if (_onDrag == true) { EpgCmds.DragCancel.Execute(null, null); e.Handled = true; } break; } } }); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }