Pergunta

este é um problema que regularmente surge quando eu escrevo Silverlight XAML. Neste caso, eu fiz um usercontrol VerticalTabStop (código em anexo) que tem uma dica de ferramenta anexada. I instanciar um par de meus usercontrols, e então eu começo a janela de depuração e o seguinte erro:

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

Eu recebo uma enorme quantidade dessas mensagens como eu passe o mouse sobre os botões. Todas as sugestões para o que estou fazendo de errado aqui?

Felicidades

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>
Foi útil?

Solução

Este é um bug no Silvelight. A maneira de trabalhar em torno dele é remover o atributo Nome na TextBlock na dica.

Eu presumo que você tem o nome lá por uma razão, e que não ser capaz de se referir a este elemento a partir do código vai ser um problema para você. Como uma solução para isso, tente substituir o XAML dica com este:

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

Agora você pode obter com o texto, fazendo AltLabel.Content. Se isso não resolver o problema, por favor me avise.

Outras dicas

Há bug muito similar mesmo em Silverlight 4. Se você criar usercontrol costume, geralmente:

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

Então, se você adicionar 2 controles sem nomes ao código XAML (com visualização):

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

Haverá exceção "O nome já existe na árvore: UserControl". Isto ocorre porque o Silverlight não é possível encontrar o nome (sem nome [MyClass]) e olha para o UserControl onde se encontra "UserControl" duas vezes.

Uma das soluções é dar alguns nomes para os controles:

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

ou inicializar este controle de código:

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

Eu estava lutando com a mesma mensagem de ontem ... ParserError - O nome já existe na árvore: blá

No meu caso o problema era que de alguma forma uma referência foi adicionado ... a si mesmo. (A DLL do projeto nos própria pasta bin / debug projetos). A remoção desta referência resolvido o problema.

Parece que esta mensagem de erro é demasiado vago.

Tente remover qualquer nome como 'x: Name = 'TabStopCanvas'' no painel de pilha, ele trabalhou para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top