从表单应用程序加载WPF窗口:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ThreadProc();
Application.Run();
}
private static void ThreadProc()
{
if (System.Windows.Application.Current == null)
new System.Windows.Application();
try
{
string assemblyName = string.Format("{0}\\AutoUpdateTesting.dll", new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName);
System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
Window wnd = LoadAssembly(assemblyName, "OtherWindow");
wnd.Show();
}));
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message));
throw new Exception(String.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message), ex);
}
}
private static Window LoadAssembly(String assemblyName, String typeName)
{
try
{
Assembly assemblyInstance = Assembly.LoadFrom(assemblyName);
foreach (Type t in assemblyInstance.GetTypes().Where(t => String.Equals(t.Name, typeName, StringComparison.OrdinalIgnoreCase)))
{
var wnd = assemblyInstance.CreateInstance(t.FullName) as Window;
return wnd;
}
throw new Exception("Unable to load external window");
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0}{1}", assemblyName, ex.Message));
throw new Exception(string.Format("Failed to load external window{0}", assemblyName), ex);
}
}
}
这就是表单的诀窍!请记住,您需要添加对基本WPF程序集(PresentationCore、WindowBase+++)的引用
WPF加载外部窗口
(把你的帖子读错了,所以这里也有wpf到wpf)
public partial class App : Application
{
App()
{
Startup += App_Startup;
}
void App_Startup(object sender, StartupEventArgs e)
{
try
{
string assemblyName = string.Format("{0}\\AutoUpdateTesting.dll", new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName);
Window wnd = LoadAssembly(assemblyName, "OtherWindow");
wnd.Show();
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message));
throw new Exception(String.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message), ex);
}
}
private Window LoadAssembly(String assemblyName, String typeName)
{
try
{
Assembly assemblyInstance = Assembly.LoadFrom(assemblyName);
foreach (Type t in assemblyInstance.GetTypes().Where(t => String.Equals(t.Name, typeName, StringComparison.OrdinalIgnoreCase)))
{
var wnd = assemblyInstance.CreateInstance(t.FullName) as Window;
return wnd;
}
throw new Exception("Unable to load external window");
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0}{1}", assemblyName, ex.Message));
throw new Exception(string.Format("Failed to load external window{0}", assemblyName), ex);
}
}
}
希望它有帮助!
干杯
什蒂安