类型' MyApp'已包含' MystatusBar'的定义

时间:2014-09-15 13:10:35

标签: c# wpf c#-4.0 wpf-controls

MyApp.XAML

<StatusBar Name="MystatusBar" DockPanel.Dock="Bottom" BorderBrush="Black"
                 Background="{StaticResource DarkBrush}">
                <StatusBarItem>
                    <TextBlock x:Name="m_StatusBarLineInfo"/>
                </StatusBarItem>
                <StatusBarItem>
                    <Separator/>
                </StatusBarItem>
                <StatusBarItem>
                    <TextBlock x:Name="m_StatusBarMessage"/>
                </StatusBarItem>
            </StatusBar>

MyApp.g.cs

     #line 722 "..\..\MyApp.xaml"
        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
        internal System.Windows.Controls.Primitives.StatusBar MystatusBar;

 case 106:
            this.MystatusBar = ((System.Windows.Controls.Primitives.StatusBar)(target));
            return;

MyApp.xaml.cs

internal StatusBar MystatusBar;
case 110:
                    this.MystatusBar = (StatusBar)target;
                    break;

这是一个usercontrol StatusBar。该错误表示&#34;类型&#39; MyApp&#39;已包含&#39; MystatusBar&#39;&#34;

的定义

在构建项目时自动创建MyApp.g.cs文件。我坚持这个。

2 个答案:

答案 0 :(得分:2)

每当您使用以下命令命名XAML元素时:

<StatusBar Name="MystatusBar" ... />

Visual Studio将为您创建一个具有该名称的成员,以便您可以从代码隐藏中访问它。这是您在 MyApp.g.cs 中看到的实例,它是生成的文件。更改XAML时会自动创建它。

因此,当您尝试在后面的代码( MyApp.xaml.cs )中自己声明另一个具有相同名称的引用时,您会收到错误,因为这三个文件都编译成了进入同一个班级。

您不需要手动声明。您可以使用Visual Studio已经为您创建的那个。

答案 1 :(得分:1)

每当您收到类似以下内容的错误时,通常都是正确的:

  

“MyApp”类型已包含“MystatusBar”

的定义

这通常意味着您的MyApp课程中已经有一个名为MystatusBar的成员。它可能是一个不同类型的成员,甚至是enum,但你 会在那里宣布一个成员。

找到它的一个好方法是转到错误声明(重复成员声明)并将其注释掉。错误总是发生在第二个声明上,或者是在页面下方声明的声明。因此,复制您的重复成员并将其粘贴到文件的顶部,就在类定义中。

再次编译时,错误现在应突出显示其他成员声明,​​因此您将知道它之后的位置。

如果这不起作用并且Visual Studio感到困惑,只需保存您的工作,然后关闭并重新打开它。之后应该没问题。