我有一个WPF应用程序,我使用多个表单。当我们启动应用程序时,会打开一个主窗体,称为MainWindow.xaml
。然后,该表单具有多个表单,这些表单根据用户选项打开。有一个形式StartClassWindow.xaml
。目前我正在处理这个表单,所以我希望它直接启动,而不是MainWindow.xaml
。因此,我更改了app.xaml startupuri
:
<Application x:Class="Class.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DispatcherUnhandledException="Application_DispatcherUnhandledException"
StartupUri="StartClassWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
字符串
但随后它开始给出如下错误:
在类型“Class.StartClassWindow”上找不到匹配的构造函数。您可以使用Arguments或FactoryMethod指令构造此类型。'行号'3'和行位置' 9 '。
下面是StartClassWindow.xaml.cs
:
namespace Class
{
public partial class StartClassWindow : System.Windows.Window
{
public StartClassWindow(string classData)
{
InitializeComponent();
className = classData;
function();
}
//rest of the code.
}
}
型
3条答案
按热度按时间vohkndzv1#
你需要向
StartClassWindow
添加一个无参数的构造函数,如下所示:字符串
或者,如果你不想有另一个构造函数,你可以覆盖
App.xaml.cs
中的OnStartup
方法,但你应该首先删除App.xaml
中的StartupUri="StartClassWindow.xaml"
。如下所示:型
im9ewurl2#
通常,你的构造函数必须是无参数的:
字符串
但是,由于你使用的是依赖注入,就像这样:
型
构造函数不是无参数的,如果不告诉框架如何示例化页面,它就无法示例化页面。
为此,有几个选项:
从构造函数中移除服务
就像这样,但是你需要以不同的方式访问userservice:
型
pre .net 4.8、4.7,使用Unity(或Prism)
您可以使用像
Unity
这样的依赖注入框架来注册组件。其描述如下:https://www.wpftutorial.net/ReferenceArchitecture.html
型
手动使用导航服务
手动导航,并执行您自己的构造:
型
如下所述:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/app-development/navigation-overview?view=netframeworkdesktop-4.8的
.net 5 WPF,使用内置DI
如果你正在使用.net 5,这里有一个教程。确保注册窗口和服务:
https://executecommands.com/dependency-injection-in-wpf-net-core-csharp/的
下面是一个例子:
型
iyfamqjs3#
我不得不注解掉Startup和StartupUri
字符串