سؤال

هذه هي المشكلة التي بانتظام ينشأ عندما أكتب سيلفرلايت XAML.في هذه الحالة, لقد قدم usercontrol VerticalTabStop (رمز المرفقة) يحتوي على تلميح الأدوات المرفقة.أنا instanciate اثنين من بلدي usercontrols ثم أحصل على التصحيح نافذة الخطأ التالية:

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. الطريق للتغلب على ذلك هو لإزالة السمة الاسم على TextBlock في تلميح الأدوات.

وأفترض أن لديك اسم هناك لسبب ما، وذلك لعدم تمكنه من الرجوع إلى هذا العنصر من التعليمات البرمجية ستكون مشكلة بالنسبة لك. كما عمل حول لذلك، حاول استبدال XAML تلميح الأدوات مع هذا:

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

والآن يمكنك الحصول على النص من خلال القيام AltLabel.Content. إذا كان هذا لا يحل مشكلتك، واسمحوا لي أن أعرف.

نصائح أخرى

وهناك علة مشابهة جدا حتى في Silverlight 4. إذا قمت بإنشاء UserControl مخصصة، عادة:

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

وبعد ذلك، إذا قمت بإضافة 2 الضوابط دون أسماء إلى رمز XAML (مع المعاينة):

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

وسوف يكون هناك استثناء "اسم موجود بالفعل في الشجرة: userControl". ويحدث ذلك بسبب سيلفرلايت لا يمكن العثور على اسم (لم يسمها [MyClass]) ويبدو أن في UserControl حيث يجدها "userControl" مرتين.

واحد من الحل هو إعطاء بعض الأسماء إلى الضوابط:

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

وأو تهيئة هذه السيطرة من التعليمات البرمجية:

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

كنت تناضل مع نفس الرسالة أمس...ParserError - الاسم موجود بالفعل في الشجرة: بلاه

في حال كانت المشكلة بطريقة أو بأخرى الإشارة وأضاف...إلى نفسه.(DLL المشروع في المشاريع الخاصة bin/debug مجلد).إزالة هذه الإشارة فرز المشكلة.

يبدو أن رسالة الخطأ هذه هو غامض جدا.

وفي محاولة لإزالة أي اسم مثل 'س: اسم = "TabStopCanvas" "في لوحة المكدس، أنها عملت بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top