【问题标题】:Silverlight: "The name already exists in the tree"Silverlight:“名称已存在于树中”
【发布时间】:2009-03-03 10:41:11
【问题描述】:

这是我编写 Silverlight XAML 时经常出现的问题。在这种情况下,我制作了一个附加了 ToolTip 的用户控件 VerticalTabStop(附加代码)。我实例化了几个用户控件,然后我得到调试窗口和以下错误:

Line:52
Error: Unhandled Error in Silverlight 2 Application
Code: 2028
Category: ParserError
Message: The name already exists in the tree: AltLabel.
File:
Line: 0
Position: 0

当我将鼠标悬停在按钮上时,我收到了大量此类消息。对我在这里做错了什么有什么建议吗?

干杯

Nik


<UserControl
    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"
    x:Class="SLEntityPresenterWebPart.VerticalTabStop"
    d:DesignWidth="20" d:DesignHeight="27">

    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <Canvas x:Name="TabStopCanvas" Height="27" Width="20">
                <ToolTipService.ToolTip>
                    <TextBlock x:Name="AltLabel" Text="Substitute me"/>
                </ToolTipService.ToolTip>
                <Image x:Name="IconImg" Canvas.Left="7" Canvas.Top="9" Width="26" Height="26" Source="Contact.png" Canvas.ZIndex="5" Margin="0,-9,0,0" RenderTransformOrigin="0.5,0.5">
                    <Image.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="0.85" ScaleY="0.85"/>
                            <SkewTransform/>
                            <RotateTransform/>
                            <TranslateTransform X="0"/>
                        </TransformGroup>
                    </Image.RenderTransform>
                </Image>
                <Image Source="stop.png" Margin="3,0,0,0"/>
            </Canvas>

        </StackPanel>
    </Grid>
</UserControl>

【问题讨论】:

    标签: silverlight xaml user-controls tooltip


    【解决方案1】:

    即使在 Silverlight 4 中也存在非常相似的错误。 如果您创建自定义用户控件,通常:

    <UserControl xmlns:MyNameSpace="clr-namespace:MyNameSpace" x:Class="MyNameSpace.MyClass" 
    x:Name="userControl" ... />
    

    那么,如果你在xaml代码中添加2个没有名字的控件(带预览):

    <MyNameSpace:MyClass ... />
    <MyNameSpace:MyClass ... />
    

    会出现异常“名称已存在于树中:userControl”。发生这种情况是因为 Silverlight 找不到名称(未命名 [MyClass])并查看 UserControl,它在其中两次找到“userControl”。

    解决方案之一是为控件命名:

    <MyNameSpace:MyClass x:Name = "MyControl1" ... />
    

    或者从代码中初始化这个控件:

    MyClass control = new MyClass();
    SomeGrid.Children.Add(control);
    

    【讨论】:

    • 这似乎是 SL 4.0.60310.0 中的错误,但不是 4.0.50826.0 中的错误
    【解决方案2】:

    这是 Silverlight 中的一个错误。解决方法是删除 Tooltip 中 TextBlock 上的 Name 属性。

    我认为你有这个名字是有原因的,而且不能从代码中引用这个元素对你来说是个问题。作为解决此问题的方法,请尝试将工具提示 xaml 替换为:

    <ToolTipService.ToolTip>
        <ToolTip x:Name="AltLabel" Content="Substitute me" />
    </ToolTipService.ToolTip>
    

    现在您可以通过执行 AltLabel.Content 来获取文本。 如果这不能解决您的问题,请告诉我。

    【讨论】:

    • 非常感谢,我不知道这是 Silverlight 中的错误,您的解决方案成功了 :-)
    【解决方案3】:

    我昨天还在为同样的消息而苦苦挣扎…… ParserError - 树中已经存在该名称: blah

    在我的情况下,问题在于以某种方式将引用添加到...自身。 (项目自己的 bin/debug 文件夹中的项目 DLL)。删除此引用解决了问题。

    好像这个错误信息太模糊了。

    【讨论】:

      【解决方案4】:

      尝试在堆栈面板中删除任何名称,如 ' x:Name="TabStopCanvas" ',它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2012-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多