2009-03-03 46 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」',它爲我工作。

相關問題