2015-10-23 124 views
0

我在wpf應用程序中使用MahApps Metro。我正在使用他們的ShowInputAsync()Dialog如何向MahApps.Metro的ShowInputAsync添加一個帶按鈕的按鈕

我想保存一個目錄,我想用對話框來設置該目錄。

所以,在我的MainWindow.xaml.cs中,我有類似的東西;

if(string.IsNullOrEmpty(userInputDirectory)) 
{ 
    userInputDirectory = await this.ShowInputAsync("Your Directory", "Set Your Directory"); 
} 

行之有效,和我一樣的對話框的外觀,但我想補充一個瀏覽按鈕,使他們不必有一個目錄的位置存儲,且可以直接瀏覽到使用System.Windows.Forms.FolderBrowserDialog();

就像我說的,我喜歡現在的樣子,我不想刪除其他兩個按鈕,或者替換一個按鈕,我只想添加一個按鈕。任何幫助表示讚賞。 >添加... - - >用戶控制 -

EDIT1

我的項目創造了一個新的用戶控件,通過右鍵點擊>用戶控件(WPF),並改變了它從UserControlDialogs:BaseMetroDialog。我還爲控件添加了xmlns。我收到錯誤Exception: Cannot create an instance of "BaseMetroDialog"。代碼如下。

<Dialogs:BaseMetroDialog x:Class="testApp.CustomDialog" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
     xmlns:Dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"   
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 

    </Grid> 
</Dialogs:BaseMetroDialog> 

我.cs文件

namespace testApp 
{ 
/// <summary> 
/// Interaction logic for CustomDialog.xaml 
/// </summary> 
    public partial class CustomDialog : CustomDialog 
    { 
     public CustomDialog() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

我得到的文件名爲.xaml錯誤顯示在XAML窗口之前,我嘗試運行該程序。

InnerException: Exception has been thrown by the target of an invocation. 
    StackTrace 
     at System.RuntimeTypeHandle.CreateInstance(RuntimeType type,  Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,  RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) 
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) 
at System.Activator.CreateInstance(Type type, Boolean nonPublic) 

InnerException: Object reference not set to an instance of an object 
    NullReferenceException: Object reference not set to an instance of an object. 
     StackTrace 
      at MahApps.Metro.Controls.Dialogs.BaseMetroDialog.HandleTheme() 
      at MahApps.Metro.Controls.Dialogs.BaseMetroDialog.Initialize() 
      at MahApps.Metro.Controls.Dialogs.BaseMetroDialog..ctor() 

EDIT2

如果任何人發現這一點,是有同樣的問題,MahApps.Metro隊(這是真棒,和非常有益的)沒加CustomDialog修復,直到1.1 .3 APHA,而不是BaseMetroDialog,你應該使用CustomDialog。

回答

2

據我所知,地鐵沒有瀏覽器對話框。 爲了有這種行爲,您需要創建自己的自定義地鐵對話框。

爲此,您必須創建一個類型爲CustomDialog的新用戶控件(位於MahApps.Metro.Controls.Dialogs中),並自己實現預期的行爲。

在您的自定義對話框中,添加一個瀏覽器按鈕,該按鈕調用 System.Windows.Forms.FolderBrowserDialog();

一旦你有你的自定義控制,您可以使用下面的代碼顯示它:

var browserDialog = new MyCustomDialog(); 
await this.ShowMetroDialogAsync(browserDialog); 
+0

感謝您回答這個問題。我要爲這個問題添加一個編輯,向您詢問關於您的指示的相當長的問題。 – trueCamelType