如何从另一个应用程序调用WPF窗口?我想要一个包含所有窗口,视图模型和所谓的“序列”(控制窗口流的标准类)的UI.Resources项目。最终,我将为要调用的UI进程调用正确的Sequence(LoginGetLocale等)。然后,“序列”类将创建所有资源,并处理显示和隐藏正确的Windows以完成任务。不幸的是,在下面的示例中,所需的窗口从不显示。该应用程序只是挂在ShowDialog()调用上:

public static bool Process(ClientLibrary client,
                   out Country country, out State state, out City city,
                   out string errorMessage)
{
    country = null;
    state = null;
    city = null;
    errorMessage = null;

    try
    {
        if (client == null) { errorMessage = "Internal Error: Client not supplied"; }

        var model = new LocaleSelectHeirarchyViewModel(client);
        var window = new LocaleSelectHeirarchyWindow(model);

        var result = window.ShowDialog();
        window.Close();
        window = null;

        if (result == null || !result.Value || model.SelectedCity == null)
        {
            return false;
        }

        country = model.SelectedCountry;
        state = model.SelectedState;
        city = model.SelectedCity;

        return true;
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);

        errorMessage = "Internal Error: Client threw an exception";

        return false;
    }
}

最佳答案

我只是做了非常相似的事情。我想分享我的方法。
这是方法。
我们将在XAML中使用System.Windows.Control.DockPanel。停靠面板可以动态加载不同的“用户控件”。用户控件与表单非常相似,我们可以在该表单上创建UI元素。在您的情况下,您要显示的对话的内容将进入此处。

步骤1

将此DockPanel放置在网格内。

<DockPanel x:Name="mainDockPanel">
</DockPanel>


第2步

下一步是创建不同的用户控件。
右键单击Visual Studio中的WPF项目->添加新的用户控件

确保新添加的用户控件的xaml.cs代码具有此功能

public partial class myUserControlUC : UserControl


从本质上讲,它应该派生自System.Windows.Controls.UserControl
使用用户控件的XAML,我们可以创建所需的任何精美的UI。

第三步

现在一切准备就绪,我们只需要致电

mainDockPanel.Children.Add(new myUserControlUC());


可以将其放在开关中以在不同条件下显示不同的内容
例如

mainDockPanel.Children.Clear();
            switch (i)
            {
                case 1:
                    mainDockPanel.Children.Add(new ToolKitUC1());
                    break;
                case 2:
                    mainDockPanel.Children.Add(new ToolKitUC2());
                    break;
                case 3:
                    mainDockPanel.Children.Add(new ToolKitUC3());
                    break;
            }

关于c# - 如何从另一个应用程序打开WPF窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22310643/

10-17 02:36