如何从 Avalonia 的控制台应用程序打开对话框

问题描述 投票:0回答:1

我有一个控制台应用程序,它在某个时候创建一个 WPF 窗口,将 VM 添加到 Datacontext,并将窗口显示为对话框。控制台通过 DialogResult 进一步运行。

我对 Avalonia 进行了同样的尝试,但没有成功。所有示例均适用于 App.axaml 和 AppBuilder(如果我想要仅 GUI 应用程序,则可以)

当我在 WPF 中创建窗口时,出现无法定位 IWindowPlatform 的异常。

我可以在阿瓦隆尼亚这样做吗?

int main()
{
    var x = foo();
    // some Initiative code
    var view = MyView();
    var viewModel = MyViewModel(x);
    view.DataContext = viewModel;
    var result = view.ShowDialog();
    if(result==DialogResult.Ok)
    {
        var y = viewModel.Bar;

    }
}
dialog modal-dialog avaloniaui
1个回答
0
投票

这个助手完成了这项工作,但看起来并不像预期的那样:

using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.ReactiveUI;

namespace Foo
{
    public class DialogService
    {
        private readonly Func<Window> windowFactory;

        public DialogService(Func<Window> windowFactory)
        {
            this.windowFactory = windowFactory;
        }
        public static AppBuilder BuildAvaloniaApp()
            => AppBuilder.Configure<App>()
                .UsePlatformDetect()
                .LogToTrace()
                .UseReactiveUI();

        internal void ShowDialog()
        {
            BuildAvaloniaApp()
            .Start(AppMain, Array.Empty<string>());
        }

        private void AppMain(Application app, string[] args)
        {
            var window = windowFactory();
            window.Show();
            app.Run(window);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.