WPF定义了自己的Main()
方法。我应该如何使用我自己的(通常)打开WPF MainWindow
的Main
方法来替换它(例如,通过命令行参数添加一个非WPF脚本模式)?
发布于 2011-05-28 03:03:02
通常,我会编辑App.xaml
以添加此支持:
<Application x:Class="SomeNamespace.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
相关部分是我使用App.xaml.cs
中的事件处理程序从StartupUri
更改为Startup
。下面是一个示例:
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
int verbose = 0;
var optionSet = new OptionSet
{
{ "v|verbose", "verbose output, repeat for more verbosity.",
arg => verbose++ }
};
var extra = optionSet.Parse(e.Args);
var mainWindow = new MainWindow(verbose);
mainWindow.Show();
}
}
发布于 2013-02-16 05:41:37
使用您的自定义静态Main方法创建新类。在此方法的末尾,只需调用WPF生成的原始App.Main():
public class Program
{
[STAThread]
public static void Main(string[] args)
{
// Your initialization code
App.Main();
}
}
然后将项目的“Startup object”设置为包含静态Main()的类。
发布于 2015-08-05 22:33:12
使用自定义的Main()可能会遇到问题,因为没有设置StartupUri。
您可以使用它来设置它,而不会让您的应用程序类感到头疼(不要忘记从App.xaml中删除StartupUri,并将其构建操作设置为Page):
[STAThread]
static void Main()
{
App app = new App();
app.InitializeComponent();
app.Run();
}
protected void OnStartup(object sender, StartupEventArgs e)
{
var toUri = new UriTypeConverter();
StartupUri = (Uri)toUri.ConvertFrom("MainWindow.xaml");
...
}
https://stackoverflow.com/questions/6156550
复制相似问题