将x:Name添加到用户控件会在生成的页面代码中出错

时间:2010-10-22 18:37:08

标签: c# wpf vb.net silverlight user-controls

我基本上是第一次使用用户控件,所以希望这只是一个愚蠢的错误。

我有一个简单的用户控件

<UserControl x:Class="TestProject.WebApp.myUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <Grid>
        <sdk:AutoCompleteBox Name="myACB" ItemsSource="{Binding Data}" FilterMode="StartsWith" MinimumPrefixLength="2" >
        </sdk:AutoCompleteBox>
    </Grid>
</UserControl>

我在另一个页面中使用该控件(在堆栈面板中):

<navigation:Page x:Class="TestProject.WebApp.myPageView" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:local="clr-namespace:TestProject.WebApp"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation">
    <Grid>
        <StackPanel Orientation="Horizontal">
            <local:myUserControl x:Name="myUC" />
        </StackPanel>
    </Grid>
</navigation:Page>

控件与页面位于同一名称空间中。删除x:Name允许项目编译并且控件在功能上有效。当指定x:Name时,我在生成的页面代码中出错:

未定义类型'TestProject.WebApp.myUserControl'。

它出现在以下代码行中:

internal TestProject.WebApp.myUserControl myUC;

this.myUC == (TestProject.WebApp.myUserControl)this.FindName("myUC")

我尝试了两种不同的控件。一样。生成的代码具有“使用TestProject.WebApp;”所以我不知道为什么只有当我有一个控件的命名实例时才会出现错误。

我似乎也无法使用Name属性。我甚至尝试在控件中重载NameProperty。

2 个答案:

答案 0 :(得分:2)

我能在这里找到一篇关于此的帖子:

.g.vb file claims that Type X is not defined, even though it is!

显然,当项目有服务引用(在我的情况下我使用的是RIA服务)时会出现问题,并且用户控件驻留在一个程序集中,该程序集具有与您尝试使用它的目标相同的根名称空间。

对我而言,是,

TestProject.WebApp

然后我尝试为控件创建一个新项目

TestProject.Controls

同样的问题。

然后,当我重命名项目并将名称空间更改为

CustomControls

它有效。

希望这能让其他人免于沮丧,我真的希望很快就能解决这个问题。

答案 1 :(得分:0)

您在这里展示的内容应该有效。项目属性中的默认命名空间是什么?您也在创建用户控件后重命名该用户控件。这两个问题都可能导致你的问题。