2017-10-05 15 views
0

TabItemコントロールから継承するClosableTabItemというカスタムUserControlがあります。私は単に保存ボタンとクローズボタンを追加しました。私はいくつかのイベントハンドラを配線しようとしています。ユーザーがX(閉じる)をクリックすると、キャンセルイベント引数を持つ "OnClosing"イベントを呼び出して、OnClosingイベントにロジックを入れて、必要に応じて閉じる操作をキャンセルできるようにしたいウィンドウのFormClosingイベント。カスタムのUserControl OnClosingイベントを作成するにはどうすればできますか?ユーザーがキャンセルしない場合はフォームを破棄します。

私はどのようにイベントを発生させることができ、私はコレクションからタブアイテムを削除する前に応答を待つか分からない。

アイデア?

ありがとうございました。

public class ClosableButtonTabItem : TabItem 
{ 
    private readonly cTabButtonHeader _closableTabHeader; 
    public event EventHandler<TabButtonClickEventArgs> OnTabButtonClick; 
    public event EventHandler<System.ComponentModel.CancelEventArgs> OnTabClosing; 
    public event EventHandler OnTabClosed; 
    public UserControl AttachedForm { get; set; } 

    public string Title 
    { 
     get => ((cTabButtonHeader) this.Header).label_TabTitle.Content.ToString(); 
     set => ((cTabButtonHeader)this.Header).label_TabTitle.Content = value; 
    } 

    public ClosableButtonTabItem() 
    { 
     _closableTabHeader = new cTabButtonHeader(); 
     Header = _closableTabHeader; 

     _closableTabHeader.button_close.Source = 
      ImageHelper.LocalPathToImageSource(ImageHelper.ImageSizes.Size_32x32, "x_off.png"); 

     _closableTabHeader.button_close.MouseEnter += button_close_MouseEnter; 
     _closableTabHeader.button_close.MouseLeave += button_close_MouseLeave; 
     _closableTabHeader.button_close.MouseLeftButtonDown += button_close_MouseLeftButtonDown; 

     _closableTabHeader.label_TabTitle.SizeChanged += label_TabTitle_SizeChanged; 

     //closableTabHeader.button_group.MouseEnter += button_save_MouseEnter; 
     //closableTabHeader.button_group.MouseLeave += button_save_MouseLeave; 
     _closableTabHeader.button_save.MouseLeftButtonDown += button_save_MouseLeftButtonDown; 
    } 

    void button_close_MouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
    { 
     OnTabClosing?.Invoke(this, new CancelEventArgs()); 

     //Code somewhere that if they don't cancel the OnClosing event the run: 
     ((TabControl)Parent).Items.Remove(this);  } 
} 

答えて

-1

私はそれを見つけました。

void button_close_MouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
    { 
     if (OnTabClosing == null) 
     { 
      ((TabControl)Parent).Items.Remove(this); 
      OnTabClosed?.Invoke(this, EventArgs.Empty); 
      return; 
     } 

     foreach (var subHandler in OnTabClosing.GetInvocationList()) 
     { 
      var cea = new TabButtonClosingEventArgs(AttachedForm); 
      OnTabClosing?.Invoke(this, cea); 
      if (cea.Cancel) continue; 
      ((TabControl)Parent).Items.Remove(this); 
      OnTabClosed?.Invoke(this, EventArgs.Empty); 
     } 
    } 
関連する問題