2009-03-03 43 views
4

这是我编写Silverlight XAML时经常出现的问题。在这种情况下,我创建了一个附带ToolTip的用户控件VerticalTabStop(附带代码)。我实例化一对夫妇的我的usercontrols的,然后我得到的调试窗口和以下错误:Silverlight:“该名称已存在于树中”

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> 

回答

5

这是Silvelight的错误。解决此问题的方法是在工具提示中删除TextBlock上的Name属性。

我认为你有一个名字出于某种原因,而不能从代码中引用这个元素会对你造成问题。作为一个变通方法是,尝试与此更换提示XAML:

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

现在,你可以通过做AltLabel.Content得到的文本。 如果这不能解决您的问题,请让我知道。

+0

非常感谢,我不知道这是Silverlight中的一个错误,你的解决方案做到了这一点:-) – 2009-03-05 07:42:40

10

有非常相似的错误,甚至在Silverlight 4 如果您创建自定义用户控件,通常是:

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

然后,如果你没有名字加2个控件的XAML代码(带预览):

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

会出现异常“该名称已存在于树:userControl”中。这是因为Silverlight无法找到名称(未命名[MyClass])并查找找到“userControl”两次的UserControl。

其中一个解决方案是给一些名字的控件:

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

或初始化代码从这个控制:

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

这似乎是SL 4.0.60310.0中的一个错误,但不是4.0.50826.0中的错误 – 2012-01-10 23:42:28

1

我用同样的消息昨天挣扎...... ParserError - 名称已经存在于树中:blah

在我的情况下,问题是,不知怎的,一个参考被添加到自身。 (该项目的DLL在项目拥有bin/debug文件夹中)。删除此参考可以解决问题。

似乎这个错误信息太模糊。

1

尝试在堆栈面板中删除任何名称,如'x:Name =“TabStopCanvas”',它为我工作。

相关问题