错误 - 已经使用相同的参数类型定义了名为“InitializeComponent”的成员

时间:2014-08-21 13:53:34

标签: c# wpf window initialization multiple-definition-error

我试图做一本完全显示

的书的例子
private Button button1;
public MainWindow()
{
    InitializeComponent();
}
private void InitializeComponent()
{
    // Configure the form.
    this.Width = this.Height = 285;
    this.Left = this.Top = 100;
    this.Title = "Code-Only Window";
    // Create a container to hold a button.
    DockPanel panel = new DockPanel();
    // Create the button.
    button1 = new Button();
    button1.Content = "Please click me.";
    button1.Margin = new Thickness(30);
    // Attach the event handler.
    button1.Click += button1_Click;
    // Place the button in the panel.
    IAddChild container = panel;
    container.AddChild(button1);
    // Place the panel in the form.
    container = this;
    container.AddChild(panel);
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    button1.Content = "Thank you.";
}

但它给了我一个错误:

"Type 'WpfApplication1.MainWindow' already defines a member called 'InitializeComponent' with the same parameter types"

4 个答案:

答案 0 :(得分:2)

在Visual Studio中创建的WPF Window类通常具有InitializeComponent方法,用于初始化其属性和内容 - What does InitializeComponent() do, and how does it work in WPF?

它是从您的XAML标记生成的,并不包含在您的代码隐藏.cs文件中,但对于the compiler(and msbuild.exe)它仍然是Window类的有效内在部分 - 如果您创建新的空窗口并单击在InitializeComponent()调用时,将打开带有初始化代码的*.g.i.cs临时文件。

所以,当您将另一个InitializeComponent方法放入代码隐藏文件时,会导致模糊的方法定义。


<强> SOLUTION:

将自定义方法重命名为InitializeComponentsCustom并在构造函数中调用它:

public MainWindow()
{
    InitializeComponent();

    InitializeComponentsCustom();
}

private void InitializeComponentsCustom()
{
    // ...
}

只需将book方法中的整个代码放入构造函数中(只是不要删除原来的InitializeComponent调用)。

答案 1 :(得分:1)

就像我在评论中所说,阅读。正确阅读是您在编程生涯中需要的一种美德。

您需要密切关注书中的注释:

  

要创建此示例,您必须从头开始编写Window1类(右键单击Solution Explorer并选择Add - &gt; Class开始)。你不能选择Add - &gt; Window,因为它会为您的窗口添加一个代码文件一个XAML模板,并自动生成一个InitializeComponent()方法。

您收到的错误也告诉您:您正在尝试定义另一个 InitializeComponent()方法。

答案 2 :(得分:1)

定义MainWindow.xaml时,会在MainWindow.g.cs中自动生成

InitializeComponent方法。

答案 3 :(得分:0)

对我来说,它是在Xamarin iOS上使用Cocoa Framework绑定

我使用的视图有两个名为init()的构造函数,它们具有不同的重载。

我在ApiDefinition.cs中删除了其中一个,这对我有用。也许这会帮助某人。