2009-03-03 9 views
4

これはSilverlight XAMLを書くときに定期的に発生する問題です。この場合、ToolTipが添付されたUserControl VerticalTabStop(コードが付加されています)を作成しました。私は私のUserControlのカップルをインスタンス化した後、私は、デバッグウィンドウと、次のエラーが表示されます。私は、ボタンの上に私のマウスを置くと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のバグではなかったと私は考えていませんでした。あなたのソリューションはこのトリックでした:-) –

10

カスタムユーザーコントロールを作成する場合に非常によく似たバグは通常、でも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"を2回見つけたUserControlを検索するために発生します。 ...

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

これは4.0.50826.0ではなく4.0.60310.0のバグです –

1
私は昨日、同じメッセージで苦しんでいた

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

をまたはコードから、このコントロールを初期化:ソリューションの

一つは、コントロールにいくつかの名前を与えることですParserError - この名前は既にツリーに存在します:blah

私の場合、問題は何とか参照が追加されたということでした...それ自体に。 (プロジェクトのDLLはプロジェクトのbin/debugフォルダにあります)。この参照を削除すると、問題が分類されました。

このエラーメッセージはあまりにも曖昧であるようです。

1

スタックパネルで 'x:Name = "TabStopCanvas"'のような名前を削除しようとすると、それは私のために働いていました。