在代码中看不到命名的Silverlight控件

在代码中看不到命名的Silverlight控件,silverlight,silverlight-3.0,user-controls,code-behind,Silverlight,Silverlight 3.0,User Controls,Code Behind,在我使用Silverlight 3的最初几个小时里,作为一个狂热的WPF用户,我对它不支持的许多东西感到非常失望。这对我来说似乎是一个奇怪的问题,而且它太普通了,我在网上找不到任何关于它的信息 我有以下XAML: <controls:TabControl x:Name="workspacesTabControl" Grid.Row="1" Background="AntiqueWhite" ItemsSource="{Binding Workspaces, ElementName=_roo

在我使用Silverlight 3的最初几个小时里,作为一个狂热的WPF用户,我对它不支持的许多东西感到非常失望。这对我来说似乎是一个奇怪的问题,而且它太普通了,我在网上找不到任何关于它的信息

我有以下XAML:

<controls:TabControl x:Name="workspacesTabControl" Grid.Row="1"
Background="AntiqueWhite" ItemsSource="{Binding Workspaces, ElementName=_root}"/>
如何访问代码隐藏中的控件

编辑:我意识到我粘贴了错误的错误-我在UserControl中有两个控件,分别是workspacesTabControl和menuStrip。我无法通过密码中的名字找到他们中的任何一个

为了以防万一,下面是
菜单的XAML

<controls:TreeView Grid.ColumnSpan="2" Height="100" x:Name="menuStrip"
                   ItemContainerStyle="{StaticResource MenuStripStyle}"
                   ItemsSource="{Binding Menu, ElementName=_root}"/>

它似乎只是在运行时加载XAML(而不是在编译之前或编译期间),因此
menuStrip
workspacesTabControl
名称实际上不会在任何地方注册(因为它们通常在WPF/win表单中)。这个属性会有问题吗?我在哪里可以摆脱对未来所有用户控件的这种要求呢?

您应该能够在代码隐藏中看到它,该部分的工作原理与WPF相同,如果您解决了menuStrip的问题,然后VisualStudio将能够构建页面的xaml部分,并且能够访问tabcontrol

我在Silverlight开发中也看到了同样的问题。针对我的问题,我的命名控件嵌套在其他控件(即datagrid)中,我无法在代码隐藏中访问它们。任何位于相同嵌套级别或高于前面提到的datagrid的命名控件都可以正常工作,但其中的任何内容都会丢失到深渊中。

当您首次创建控件时,Visual Studio不会使用intellisense拾取它。但是,在您尝试构建项目之后,它应该是可用的。您也可以在没有intellisense的情况下键入名称,然后构建它。我还没有证实这一点,但我听说这是在SL4中要解决的问题清单上


也就是说,如果您在datatemplate中命名一个控件,那么该控件在代码隐藏中无法直接访问。这对于WPF也是一样的。

正如前面提到的,它应该只出现在Intellisense中,但是事实上,您得到了一个与其他内容相关的错误,即“menuStrip”可能会干扰Intellisense。解决这个错误,您可能会发现您可以访问“workspacesTabControl”控件

您是否可能使用一些示例代码,或者他们将一个控件命名为“menuStrip”,然后您将其重命名


祝您好运

检查您没有任何控件使用与命名空间名称相同的类名。例如:

namespace Solution.ProjectName.workspacesTabControl
{  
    public class workspacesTabControl
    {
        ...
    }
}  
这也会给你这个错误

祝你好运,

Mark

尽管听起来很可笑,我还是求助于使用FindName()方法来访问代码隐藏中的命名项:

this.FindName("workspacesTabControl") as TabControl

我意识到这是一种荒谬的方式,但我现在不得不使用这种方式。请让我知道是否有人遇到了这个问题,并提出了更好的解决方案

检查VS中xaml文件本身的属性。。。确保将生成操作设置为Page。

无法重现您的问题。出于好奇,您的UserControl上的x:Class设置为什么?事实并非如此。我的定义如下:namespace SapphireApplication{public分部类SapphireMain:UserControl{我遇到了这个问题,这对我来说很有效。我必须将构建操作设置为Page,然后更改XAML中的某些内容,以使VS重新编译该页面。这是我的问题,它起了作用。此外,Brandon建议需要重新编译XAML。当我将XAML+.cs文件从一个项目复制到另一个项目时,构建操作是set转到ApplicationDefinition而不是页面。将其更改回,注释掉所有隐藏的代码,构建并注释掉所有隐藏的代码为我解决了问题。感谢上帝发布此帖子!我刚刚将一个用户控件从一个项目复制到另一个项目,结果发生了这种情况。非常混乱:(我知道它很古老,但是这个答案的第二段帮助了我——我没有意识到这个事实,我将不得不以另一种方式控制它。
namespace Solution.ProjectName.workspacesTabControl
{  
    public class workspacesTabControl
    {
        ...
    }
}  
this.FindName("workspacesTabControl") as TabControl