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

时间:2009-12-03 20:18:32

标签: 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=_root}"/>

但是,我无法在代码隐藏中看到workspacesTabControl。我想也许IntelliSense只是意味着并试图继续编译它,但是得到了一个错误:

Error   1   The name 'workspacesTabControl' does not exist in the current context

如何在代码隐藏中访问控件?

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

以防万一,这是menuStrip

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

再次编辑:

我不确定这是否有用,但我已经看了InitializeComponent()代码,这就是我看到的内容:

[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Windows.Application.LoadComponent(this, new System.Uri("/SapphireApplication;component/SapphireMain.xaml", System.UriKind.Relative));
}

它似乎只是在运行时(不是在编译之前或编译期间)加载XAML,因此menuStripworkspacesTabControl名称实际上并未在任何地方注册(因为它们通常在WPF中/赢表格)。该属性可能是个问题吗?我在哪里可以摆脱所有未来UserControls的这个要求?

7 个答案:

答案 0 :(得分:22)

检查VS中的属性以获取xaml文件本身...确保将Build Action设置为Page。

答案 1 :(得分:2)

听起来很荒谬,我已经使用FindName()方法访问代码隐藏中的命名项:

this.FindName("workspacesTabControl") as TabControl

我意识到这是一种荒谬的方式,但我现在被迫使用它。如果有其他人遇到此问题并想出更好的解决方案,请告诉我!

答案 2 :(得分:1)

首次创建控件时,Visual Studio不会使用intellisense进行控制。但是,在您尝试构建项目之后,它应该可用。您也可以在没有intellisense的情况下输入名称,然后构建它。没有验证这一点,但我听说这是在SL4中修复的事项清单。

话虽这么说,如果你在datatemplate中命名一个控件,那么在代码隐藏中不能直接访问该控件。不过,WPF的情况也是如此。

答案 3 :(得分:0)

你应该能够在代码隐藏中看到它,那部分与WPF一样,也许如果你用menuStrip修复问题,那么visual studio将能够构建页面的xaml paty并且能够访问tabcontrol

答案 4 :(得分:0)

我在Silverlight开发中遇到了同样的问题。特定于我的问题我的命名控件嵌套在其他控件(即数据网格)中,我无法在我的代码后面访问它们。在同一嵌套级别或之前提到的数据网格上方的任何命名控件都可以正常工作,但其中的任何内容都会丢失到深渊中。

答案 5 :(得分:0)

正如已经提到的,它应该只出现在Intellisense中,但是你得到一个与其他东西有关的错误,即“menuStrip”可能会干扰Intellisense。解决该错误,您可能会发现可以访问“workspacesTabControl”控件。

您是否可能使用了一些示例代码或者他们已将控件命名为“menuStrip”并且您已将其重命名为?

祝你好运

答案 6 :(得分:0)

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

namespace Solution.ProjectName.workspacesTabControl
{  
    public class workspacesTabControl
    {
        ...
    }
}  

这也会给你这个错误。

祝你好运,
标记

相关问题