2017-03-26 27 views
-1

私のアプリケーションでmahapps.metroのダイアログを使いたいです。私のウィンドウは普通のwindowです。私のボタン方式インサイドMahapps Metro Dialog without MetroWindow

public partial class MainWindow : Window 

ない

MetroWindow 

私はこれを書いた:

var metroWindow = (Application.Current.MainWindow as MetroWindow); 
await metroWindow.ShowMessageAsync("Foo", "Bar"); 

私はApp.xaml.cs

protected override void OnStartup(StartupEventArgs e) 
{ 
    Tuple<AppTheme, Accent> appStyle = ThemeManager.DetectAppStyle(Application.Current); 

    ThemeManager.ChangeAppStyle(Application.Current, 
           ThemeManager.GetAccent("Green"), 
           ThemeManager.GetAppTheme("BaseDark")); // or appStyle.Item1 
    base.OnStartup(e); 
} 

内部内部ThemeManagerを追加しましたは、私は私のプログラムの開発を実行するとmetroWindow == nullの

がどのように私はこの問題を解決することができますので、私は

とNullReferenceException

を取得

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

を追加しましたか?

+0

親 'MetroWindow' *とにかく*を見つける必要があるので、なぜ' MainWindow'を使わないのかはっきりしていませんか? –

+0

多分これはhttps://dragablz.net/2015/05/29/using-mahapps-dialog-boxes-in-a-mvvm-setup/ – Peter

+1

MahAppsダイアログはMetroWindowなしでは使用できません。原因はいくつかありますウインドウがダイアログと連動するスタイルで。 – punker76

答えて

2

マイウィンドウは通常のウィンドウです。

これは問題です。 はMetroWindowクラスの拡張メソッドなので、呼び出すにはMetroWindowへの参照が必要です。つまり、通常のウィンドウをMetroWindowに置き換えるか、別のダイアログを使用する必要があります。 ShowMessageAsyncメソッドはMetroWindowでのみ動作します。

次のコードでは、MetroWindowに、アプリケーションのMainWindowウィンドウをキャストしようとしますが、メインウィンドウは確かに通常のウィンドウであればキャストは常に失敗します。

var metroWindow = (Application.Current.MainWindow as MetroWindow); 

あなたがNullReferenceExceptionを得る理由です。

どうすればこの問題を解決できますか?

MetroWindowを使用する必要があります。私が恐れている他の解決策はありません。

関連する問題