Ok, I suspect this might be a Visual Studio thing, but there must be some reason for this. I created from the list of default items a ListBox (Right Click on project, or folder in project -> Add -> New Item -> Xaml ListBox). Immediately I get a red squiggly line with the error:
"Error 2 The call is ambiguous between the following methods or properties: 'Identical.NameSpace.ListBox1.InitializeComponent()' and 'Identical.NameSpace.ListBox1.InitializeComponent()' C:\Documents and Settings\ouflak\My Documents\Visual Studio 2010\Projects\Identical\NameSpace\ListBox1.xaml.cs 27"
All of the code in question is auto-generated and the reason for the error is because of a conflict between two auto-generated files: ListBox1.g.cs and ListBox1.designer.cs where public void
InitializeComponent() is declared in both. Naturally the code cannot compile under this circumstance. It is simple enough to just delete the ListBox1.designer.cs and move on I suppose. But my question: Why is this code auto-generated with this error? I would expect anything auto-generated to be able to build and compile without having to touch the project or any code. For just about every other toobox item that you can add, this is the case. So why generate this code with the built-in error? Are we supposed to find some way to make this work? Is this code merely a suggestion and it is up to the IDE user/developer to hammer out the details?
Here is the generated code: ListBox1.xaml:
< ?xml version="1.0" encoding="utf-8" ? >
< ListBox
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xc="http://ns.neurospeech.com/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="Identical.NameSpace.ListBox1"
>
<sys:String>Item 1</sys:String>
<sys:String>Item 2</sys:String>
<sys:String>Item 3</sys:String>
< /ListBox>
ListBox1.g.cs:
namespace Identical.Namespace
{
/// <summary>
/// ListBox1
/// </summary>
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public partial class ListBox1 : System.Windows.Controls.ListBox, System.Windows.Markup.IComponentConnector {
private bool _contentLoaded;
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/MyProject;component/namespace/listbox1.xaml", System.UriKind.Relative);
#line 1 "..\..\..\namespace\ListBox1.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
this._contentLoaded = true;
}
}
}
ListBox1.designer.cs:
namespace Identical.NameSpace
{
using System;
public partial class ListBox1 : System.Windows.Controls.ListBox
{
private void InitializeComponent()
{
// Pre Statements...
string string1 = "Item 1";
string string2 = "Item 2";
string string3 = "Item 3";
// Statements...
this.BeginInit();
this.Items.Add(string1);
this.Items.Add(string2);
this.Items.Add(string3);
this.EndInit();
// Post Statements...
}
}
}
and lastly the ListBox1.xaml.cs (only modified to prevent XML documentation and Stylecop warnings):
namespace Identical.NameSpace
{
/// <summary>
/// ListBox1 class
/// </summary>
public partial class ListBox1 : ListBox
{
/// <summary>
/// Initializes a new instance of the ListBox1 class
/// </summary>
public ListBox1()
{
this.InitializeComponent();
}
}
}
That's it. This is the code entirely in its virgin auto-generated state with the exception of the comments I put into the xaml.cs file.
I've searched this site and the internet a bit, but no one seems to have explained this behavior. I will probably just delete the designer.cs code and move on. But if anybody knows why this is here in the first place, or if it is indeed a bug in Visual Studio 2010 professional, I'd really like to know.
I had this issue when copying my XAML between controls. I just had to change my x:Class="mynamespace" where mynamespace is the proper namespace for your project. Recompiled and all went back to normal.
Both classes are partial, meaning they share each others non private fields & methods.
Your
ListBox1
does have twoInitializeComponent
(shared) methods. Changing the namespace of eitherListBox1
will resolve this error.It appears that you have declared the
InitializeComponent
method in two places in your class, probably one in each partial class. Try searching in all files forInitializeComponent
in Visual Studio and I'm guessing that the results will list two places where it is declared. Delete one and the error will disappear.UPDATE >>>
I'm not sure what kind of answer you're expecting here... clearly, if you didn't add one of those
InitializeComponent
method definitions, then visual Studio has a bug. I very much doubt that there can be any kind of logical reason for this except that it's a bug.UPDATE 2 >>>
I had a look on the Microsoft Connect website for any existing reported bugs like this but couldn't find any... I've left the link here if you do want to report it to them.
I have just had and resolved this exact thing..
It happened at some point during or after I duplicated a form, in a WinForms program, then renamed it to blah_Copy.
The main cs file and the designer cs file, are both partial classes. So if a method is defined in both and it has the same name and parameters (or same name and same no paramters) , / same signature then it will clash.
In my case they both, both Initialize() { .. } definitions, had identical bodies so I easily just removed one.
Also let's say the method is Initialize() (it was in my case). If you go to call itself, then hit F12 it will go to one of((or perhaps even at least one), of the definitions.
My problem was the project that was giving me the ambiguous call had a reference to its own dll. This was causing the method to be referenced from the dll as well as in the actual project. Once i removed the dll from the references the ambiguous call error went away.
I ran into this issue, with a user control and an associated style. I think I had tried to move some logic into the style class but it didn't work, so I undid it, but apparently something got left behind.
It was also complaining about the _contentLoaded variable, so I tried deleting the one that was there, and the error went away, and was not replaced with another error. I then hit F12 to go to _contentLoaded's definition and found that it was in the *.g file for the style class. Though the file was named after the style, the class inside was named after the user control.
I deleted the bin and obj folders to resolve it.