2016-05-02 22 views
0

MVVMを使用するWPFでは、ユーザーが閉じるボタンをクリックしたときに確認メッセージを追加する方法。毎回、確認メッセージなしでウィンドウを閉じるだけですが、Windowsフォームでも同じことが起こっています。 APP.XAML.CSユーザーがMVVMを使用してWPFの閉じるボタンをクリックしたときにメッセージを追加する

public partial class App : Application 
    { 
     protected override void OnExit(ExitEventArgs e) 
     { 
      if (MessageBox.Show("Sure you wanna close?", "..", MessageBoxButton.YesNo) == MessageBoxResult.No) 
       e.ApplicationExitCode = 110; 
      base.OnExit(e); 
     } 
    } 

私はそれだけでウィンドウを閉じて確認を求めるdoes notの[閉じる]ボタンをクリックしてください。

答えて

0
protected override void OnStartup(StartupEventArgs e) 
    {    

     base.OnStartup(e); 
     base.ShutdownMode = ShutdownMode.OnMainWindowClose; 

     //update user settings (if first run after software upgrade) 

     } 

     // Initialise the application directory// 

     // Set up the main window and its view model 
     var mainWindow = new MainWindow(); 
     mainWindowViewModel = new MainWindowViewModel(); 
     mainWindow.DataContext = mainWindowViewModel; 
     mainWindow.Show(); 

    } 

    protected override void OnExit(ExitEventArgs e) 
    { 



     e.ApplicationExitCode = 110; 
     Dispose(); 
     base.OnExit(e); 

}

+0

'base.OnClosing(e)'を呼び出すことを忘れないでください。 –

+0

あなたがAPP.XAML.CS.にある – suulisin

+0

HIを助けてくれたら、アップしてください。 public partial class App:アプリケーション、IDisposable。したがって、 'System.Windows.Application'のようなエラーが発生すると、OnClosing.soの実行中に 'OnClosing'の定義が含まれないため、これは実行できません –

0

あなたが行動を使用することができます。

まず、プロジェクトのインタラクティブ機能への参照を追加する必要があります。

参照先 - addReference-assemblies-System.Windows.Interactivity。

ここで、動作を作成します。

public class CloseWindowBehavior : Behavior<Window> 
{ 

    protected override void OnAttached() 
    { 
     this.AssociatedObject.Closing += AssociatedObject_Closing; 
    } 

    private void AssociatedObject_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if (MessageBox.Show("Sure you wanna close?", "..", MessageBoxButton.YesNo) == MessageBoxResult.No) 
      e.Cancel = true; 
    } 
} 

閉じるボタンをクリックすると、割り当てられたイベントが発生し、メッセージボックスが表示されます。

これで、作成した動作をxamlファイルで宣言する必要があります。

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication1" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<i:Interaction.Behaviors> 
    <local:CloseWindowBehavior /> 
</i:Interaction.Behaviors> 
<Grid> 

</Grid> 

あなたはパターンMVVMを使用しているので、動作は、背後にあるコードで、単一の行を記述する必要はありませんので、良い選択です。

関連する問題