Question

C’est un problème qui se pose régulièrement lorsque j’écris Silverlight XAML. Dans ce cas, j'ai créé un contrôle utilisateur VerticalTabStop (code attaché) auquel une info-bulle est attachée. J'instancie quelques-uns de mes contrôles utilisateur, puis j'obtiens la fenêtre de débogage et l'erreur suivante:

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

Je reçois énormément de ces messages lorsque je passe la souris sur les boutons. Des suggestions à ce que je fais mal ici?

A bientôt

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>
Était-ce utile?

La solution

Ceci est un bug dans Silvelight. La solution consiste à supprimer l'attribut Name du TextBlock dans l'info-bulle.

Je présume que le nom y figure pour une raison et que le fait de ne pas pouvoir se référer à cet élément à partir de code va poser un problème. Pour contourner ce problème, essayez de remplacer l'info-bulle xaml par ceci:

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

Vous pouvez maintenant accéder au texte en faisant AltLabel.Content. Si cela ne résout pas votre problème, faites-le moi savoir.

Autres conseils

Il y a un bug très similaire, même dans Silverlight 4. Si vous créez un contrôle utilisateur personnalisé, généralement:

<UserControl xmlns:MyNameSpace="clr-namespace:MyNameSpace" x:Class="MyNameSpace.MyClass" 
x:Name="userControl" ... />

Ensuite, si vous ajoutez 2 contrôles sans nom au code xaml (avec aperçu):

<MyNameSpace:MyClass ... />
<MyNameSpace:MyClass ... />

Il y aura une exception "Le nom existe déjà dans l’arborescence: utilisateurControl". Cela se produit car Silverlight ne peut pas trouver le nom (non nommé [MyClass]) et cherche le contrôle UserControl où il trouve "userControl "". deux fois.

Une des solutions consiste à donner des noms aux contrôles:

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

Ou initialisez ce contrôle à partir du code:

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

Je me débattais avec le même message hier ... ParserError - Le nom existe déjà dans l'arborescence: Blah

Dans mon cas, le problème était qu’une référence avait été ajoutée ... à elle-même. (La DLL du projet dans le dossier bin / debug du projet). Supprimer cette référence a réglé le problème.

Il semble que ce message d'erreur soit trop vague.

Essayez de supprimer tout nom tel que 'x: Name = " TabStopCanvas " 'dans le panneau de pile, cela a fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top