替换 WPF 入口点
WPF 定义了自己的 Main()
方法。我应该如何用我自己的 Main
方法替换它(通常)打开 WPF MainWindow
(例如通过命令行参数添加非 WPF 脚本模式) ?
WPF defines its own Main()
method. How should I go about replacing it with my own Main
method that (normally) opens the WPF MainWindow
(e.g. to add a non-WPF scripting mode via command-line arguments)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(6)
冰葑2024-11-17 07:24:24
通常,我编辑 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">
相关部分是我使用 中的事件处理程序从
。这是一个例子:StartupUri
更改为 Startup
App.xaml.cs
/// <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();
}
}
中性美2024-11-17 07:24:24
伙计们
问题是你的程序有两个静态 Main() 方法,这会导致编译器抱怨;要解决此问题,请尝试以下操作之一:
- 告诉编译器您的静态 Main() 方法应该是执行入口点 - 将项目的“启动对象”设置设置为包含静态 Main() 方法的类(右键单击在解决方案资源管理器中打开项目,选择“属性”,然后在“应用程序”选项卡下查找“启动对象”设置)。
- 关闭 App.g.cs 的静态 Main() 方法的自动生成 - 在解决方案资源管理器中,右键单击 App.xaml,选择“属性”,然后将“生成操作”从“ApplicationDefinition”更改为“Page”。
甜警司2024-11-17 07:24:24
使用自定义 Main() 可能会遇到问题,因为未设置 StartupUri。
您可以使用它在 App 类中轻松设置它(不要忘记从 App.xaml 中删除 StartupUri 并将其 Build Action 设置为 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");
...
}
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一些示例描述了将 App.xaml 的构建操作从
ApplicationDefinition
更改为Page
并编写您自己的Main()
来实例化App
code> 类并调用其Run()
方法,但这可能会在 App.xaml 中解析应用程序范围资源时产生一些不良后果。相反,我建议在自己的类中创建自己的
Main()
,并在项目属性中将启动对象设置为该类:我这样做是为了利用一些
AppDomain< /code> 在发生任何其他事情之前必须订阅的事件(例如
AssemblyResolve
)。我遇到的将 App.xaml 设置为Page
的不良后果包括我的UserControl
视图 (MV-VM) 在设计时无法解析 App.xaml 中保存的资源。< /em>Some examples depict changing App.xaml's Build Action from
ApplicationDefinition
toPage
and writing your ownMain()
that instantiates theApp
class and calls itsRun()
method, but this can produce some unwanted consequences in the resolution of application-wide resources in App.xaml.Instead, I suggest making your own
Main()
in its own class and setting the Startup Object to that class in the project properties:I do this to take advantage of some
AppDomain
events that must be subscribed to before anything else happens (such asAssemblyResolve
). The unwanted consequences of setting App.xaml toPage
that I experienced included myUserControl
Views (M-V-VM) not resolving resources held in App.xaml during design-time.