UserControl中的Overspecified Namespace失败WPF Build

时间:2009-07-09 16:24:35

标签: wpf build namespaces

我有一个非常简单的用户控件,我正在尝试在XAML中实例化它。我发现当我对命名空间有点过分热心时,我遇到了x:Name的问题。

这是我的UserControl:

<UserControl x:Class="UserControlTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300">
<Grid>
    <Label Name="Label1">Label</Label>
</Grid>
</UserControl>

以下是UserControl的代码隐藏:

Namespace UserControlTest
Partial Public Class UserControl1

End Class
End Namespace

现在,请注意我将VB.Net项目的根命名空间设置为“UserControlTest”。知道了,看看我的主窗口: 这是我的主窗口:

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control="clr-namespace:UserControlTest.UserControlTest"
Title="Window1" Height="300" Width="300">
<Grid>
    <control:UserControl1 />
</Grid>
</Window>

查看控件别名如何拥有“UserControlTest.UserControlTest”?那是因为我将项目的根命名空间设置为UserControlTest,并且我还将UserControl的命名空间定义为UserControlTest。如果我没有为UserControl使用命名空间,我没有任何麻烦。

但是,因为我已经这样做了,如果我尝试将x:Name应用于UserControl,则构建失败,如下所示:

    <control:UserControl1 x:Name="test"/>

这将导致构建失败,并出现此错误:

Type 'UserControlTest.UserControlTest.UserControl1' is not defined. 

任何人都可以解释原因吗?我是否需要避免将我的UserControls放入名称空间,以便我可以给它们x:名称值?我想从代码隐藏中操纵我的UserControls,没有x:Name,我就是小溪。但是我不想为了得到它而牺牲命名空间用法!

非常感谢。

3 个答案:

答案 0 :(得分:2)

我有同样的问题(在重建项目之后,首先它工作得很好......)。我将UserControl放入单独的命名空间。

答案 1 :(得分:0)

在用户控件的代码隐藏中定义的命名空间是什么?

如果您的项目名为Foo,并且您在该项目中有一个名为Controls的文件夹,则添加到该文件夹​​的任何新用户控件都将被赋予名称空间Foo.Controls。

然后在你的XAML中你可以像这样引用它:

xmlns:Controls="clr-namespace:Foo.Controls"
...
<Controls:UserControl1 x:Name="uc1"/>

好像你有一个命名问题。

编辑:

以下是我在我的一个项目中的表现。

StatusBar.xaml.cs

namespace Client.Controls.UserControls
{
public partial class StatusBar : UserControl
{ 
...
}
}

StatusBar.xaml

<UserControl x:Class="Client.Controls.UserControls.StatusBar">
</UserControl>

Main.xaml.cs

using Client.Controls.UserControls;

namespace Client
{
public partial class Main : Window
{
...
}
}

Main.xaml

<Window x:Class="Client.Main"
xmlns:UserControls="clr-namespace:Client.Controls.UserControls">
<UserControls:StatusBar x:Name="mainStatusBar" />
</Window>

答案 2 :(得分:0)

我在vb.net项目中遇到了同样的问题,尽管在这里和其他地方尝试了建议,但无法解决问题。实际上,我能够将完全相同的代码从我们的项目中提取到一个新项目,并且它工作正常(据我所知,新项目中的所有配置都相同)。在David提供的解决方案中,我注意到他正在使用c# - 我想知道这是否与vb.net有关。

最后,我需要使用的用户控件非常简单,我将其实现为资源ControlTemplate以解决问题。对不起,我没有更好的答案,我真的不高兴我的发现...