如何从另一个应用程序打开WPF窗口
本文关键字:WPF 窗口 应用程序 另一个 | 更新日期: 2023-09-27 17:49:27
如何从另一个应用程序调用WPF窗口?我想有一个UI.Resources
项目与所有的窗口,视图模型,我称之为"序列"(标准类来控制窗口流)。最后,我将为我想要调用的UI进程(Login
, GetLocale
等)调用适当的序列。"sequence"类随后将创建所有资源,并处理显示和隐藏正确的窗口以完成任务。不幸的是,在下面的示例中,期望的窗口从未显示。应用程序只是挂在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。dock面板可以动态加载不同的"用户控件"。用户控件非常类似于表单,我们可以在表单上创建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。
步骤3现在一切都准备好了,我们只需要调用
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;
}