Silverlight :“이름은 이미 나무에 존재합니다”
-
03-07-2019 - |
문제
이것은 Silverlight XAML을 쓸 때 정기적으로 발생하는 문제입니다. 이 경우 툴팁이 첨부 된 usercontrol verticaltabstop (코드 첨부)을 만들었습니다. 나는 몇 개의 usercontrols를 주입 한 다음 디버깅 창과 다음 오류를 얻습니다.
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>
해결책
이것은 Silvelight의 버그입니다. 주변에서 작업하는 방법은 툴팁의 텍스트 블록에서 이름 속성을 제거하는 것입니다.
나는 당신이 이유가 있기 때문에 그 이름을 가지고 있으며, 코드 에서이 요소를 언급 할 수 없다는 것이 당신에게 문제가 될 것이라고 가정합니다. 이를위한 작업으로 툴팁 XAML을 다음과 같이 대체하십시오.
<ToolTipService.ToolTip>
<ToolTip x:Name="AltLabel" Content="Substitute me" />
</ToolTipService.ToolTip>
이제 AltLabel.content를 수행하여 텍스트를받을 수 있습니다. 이것이 당신의 문제를 해결하지 못하면 알려주세요.
다른 팁
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);
어제 같은 메시지로 고군분투하고있었습니다 ...parsererror- 이름은 이미 나무에 있습니다. 블라
제 경우에는 문제가 어떻게 든 참조가 추가되었다는 것이 었습니다. (프로젝트에서 프로젝트의 DLL은 BIN/DEBUG 폴더 자체). 이 참조를 제거하면 문제가 해결되었습니다.
이 오류 메시지가 너무 모호한 것 같습니다.
스택 패널에서 'x : name = "tabstopcanvas"'와 같은 이름을 제거하십시오.