Вопрос

эта проблема регулярно возникает, когда я пишу Silverlight XAML.В этом случае я создал пользовательский элемент управления UpperTabStop (код прилагается), к которому прикреплена всплывающая подсказка.Я создаю экземпляр нескольких своих пользовательских элементов управления, а затем получаю окно отладки и следующую ошибку:

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.Чтобы обойти эту проблему, необходимо удалить атрибут Name в TextBlock во всплывающей подсказке.

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

Возникнет исключение «Имя уже существует в дереве:Пользовательский контроль».Это происходит потому, что Silverlight не может найти имя (без имени [MyClass]) и обращается к UserControl, где дважды находит «userControl».

Одно из решений — дать элементам управления несколько имен:

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

Или инициализируйте этот элемент управления из кода:

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top