Silverlight:"这个名字已存在于树中"

nik*_*-vc 4 silverlight xaml user-controls tooltip

当我编写Silverlight XAML时,这是一个经常出现的问题.在这种情况下,我已经创建了一个附加了ToolTip的usercontrol 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
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在按钮上时,我收到了很多这些消息.对我在这里做错了什么的建议?

干杯

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>
Run Code Online (Sandbox Code Playgroud)

Art*_*tru 10

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

<UserControl xmlns:MyNameSpace="clr-namespace:MyNameSpace" x:Class="MyNameSpace.MyClass" 
x:Name="userControl" ... />
Run Code Online (Sandbox Code Playgroud)

然后,如果您向xaml代码添加2个没有名称的控件(带预览):

<MyNameSpace:MyClass ... />
<MyNameSpace:MyClass ... />
Run Code Online (Sandbox Code Playgroud)

将出现异常"树中已存在名称:userControl".之所以会发生这种情况,是因为Silverlight无法找到名称(未命名的[MyClass])并查找UserControl,它会在其中找到"userControl"两次.

其中一个解决方案是为控件提供一些名称:

<MyNameSpace:MyClass x:Name = "MyControl1" ... />
Run Code Online (Sandbox Code Playgroud)

或者从代码初始化此控件:

MyClass control = new MyClass();
SomeGrid.Children.Add(control);
Run Code Online (Sandbox Code Playgroud)


Kei*_*ney 5

这是Silvelight中的一个错误.解决它的方法是删除工具提示中TextBlock上的Name属性.

我认为你有一个名字是有原因的,而且无法从代码中引用这个元素对你来说是一个问题.为解决这个问题,请尝试使用以下方法替换工具提示xaml:

<ToolTipService.ToolTip>
    <ToolTip x:Name="AltLabel" Content="Substitute me" />
</ToolTipService.ToolTip>
Run Code Online (Sandbox Code Playgroud)

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