Silverlight: «Имя уже существует в дереве» - PullRequest
4 голосов
/ 03 марта 2009

это проблема, которая регулярно возникает, когда я пишу Silverlight XAML. В этом случае я создал пользовательский элемент управления 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

Я получаю очень много этих сообщений, когда нахожу мышь на кнопки. Есть предложения, что я тут делаю не так?

Приветствия

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>

Ответы [ 4 ]

10 голосов
/ 06 апреля 2011

Существует очень похожая ошибка даже в 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);
5 голосов
/ 05 марта 2009

Это ошибка в Silvelight. Чтобы обойти это, нужно удалить атрибут Name в TextBlock во всплывающей подсказке.

Я предполагаю, что у вас есть имя там по какой-то причине, и что неспособность ссылаться на этот элемент из кода будет для вас проблемой Чтобы обойти это, попробуйте заменить всплывающую подсказку xaml следующим:

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

Теперь вы можете перейти к тексту, выполнив AltLabel.Content. Если это не решит вашу проблему, пожалуйста, дайте мне знать.

1 голос
/ 03 февраля 2013

Попробуйте удалить любое имя, например 'x: Name = "TabStopCanvas"' на панели стека, у меня это сработало.

1 голос
/ 17 августа 2011

Я вчера боролся с тем же сообщением ... ParserError - Имя уже существует в дереве: бла

В моем случае проблема заключалась в том, что каким-то образом была добавлена ​​ссылка ... на себя. (DLL проекта в собственной папке bin / debug). Удаление этой ссылки решило проблему.

Похоже, это сообщение об ошибке слишком расплывчато.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...