Domanda

questo è un problema che si presenta regolarmente quando scrivo Silverlight XAML. In questo caso, ho creato un controllo verticale VerticalTabStop (codice allegato) a cui è collegata una descrizione comandi. Istituisco un paio dei miei controlli utente, quindi visualizzo la finestra di debug e il seguente errore:

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

Ricevo moltissimi di questi messaggi mentre passo il mouse sui pulsanti. Qualche suggerimento su cosa sto facendo di sbagliato qui?

Saluti

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>
È stato utile?

Soluzione

Questo è un bug in Silvelight. Il modo per aggirare il problema è rimuovere l'attributo Name su TextBlock nella descrizione comando.

Presumo che tu abbia il nome lì per un motivo, e che non poter fare riferimento a questo elemento dal codice sarà un problema per te. Per ovviare a questo, prova a sostituire il tooltip xaml con questo:

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

Ora puoi accedere al testo facendo AltLabel.Content. Se questo non risolve il tuo problema, per favore fatemelo sapere.

Altri suggerimenti

Esiste un bug molto simile anche in Silverlight 4. Se crei un controllo utente personalizzato, in genere:

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

Quindi, se aggiungi 2 controlli senza nome al codice xaml (con anteprima):

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

Ci sarà un'eccezione " Il nome esiste già nella struttura: userControl " ;. Si verifica perché Silverlight non riesce a trovare il nome (senza nome [MyClass]) e guarda UserControl dove trova " userControl " due volte.

Una delle soluzioni è dare dei nomi ai controlli:

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

O inizializza questo controllo dal codice:

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

Ieri stavo lottando con lo stesso messaggio ... ParserError - Il nome esiste già nella struttura: blah

Nel mio caso il problema era che in qualche modo era stato aggiunto un riferimento ... a se stesso. (La DLL del progetto nella cartella bin / debug del progetto possiede). La rimozione di questo riferimento ha risolto il problema.

Sembra che questo messaggio di errore sia troppo vago.

Prova a rimuovere qualsiasi nome come 'x: Name = " TabStopCanvas " "nel pannello stack, ha funzionato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top