繁体   English   中英

如何从MahApps.Metro向ShowInputAsync添加带动作的按钮

[英]How do I add a button with action to ShowInputAsync from MahApps.Metro

我在一个wpf应用程序中使用MahApps Metro。 我正在使用他们的ShowInputAsync() 对话框

我想要保存目录,我想使用Dialog来设置该目录。

所以,在我的MainWindow.xaml.cs中,我有类似的东西;

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

这很好用,我喜欢Dialog的外观,但我想添加一个Browse按钮,这样他们就不必记住目录位置,只需使用System.Windows.Forms.FolderBrowserDialog();浏览到所需的目录即可。 System.Windows.Forms.FolderBrowserDialog();

就像我说的,我喜欢它现在看起来如何,我不想删除其他两个按钮,或者更换一个按钮,我只想添加一个。 任何帮助表示赞赏。

EDIT1

我通过右键单击项目 - >添加... - >用户控件 - >用户控件(WPF)创建了一个新的用户控件,并将其从UserControl更改为Dialogs: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团队(这很棒,非常有帮助)在1.1.3 APHA之前没有添加CustomDialog修复,而不是BaseMetroDialog,你应该使用CustomDialog。

据我所知,metro没有浏览器对话框。 为了实现这种行为,您需要创建自己的自定义城域对话框。

为此,您必须创建一个类型为CustomDialog的新用户控件(位于MahApps.Metro.Controls.Dialogs中)并自行实现预期的行为。

在自定义对话框中,添加一个调用System.Windows.Forms.FolderBrowserDialog()的浏览器按钮;

获得自定义控件后,可以使用以下代码显示它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM