User Control error: Value does not fall within the expected range.

Olukord: Mul on UserControl nimega Snowflake ning ma püüan neid programselt oma lehele lisada:

Random r = new Random();
double top = 0;
double left = 0;
for (int i = 0; i < 100; i++)
{
    top = r.NextDouble()*500;
    left = r.NextDouble()*500;
    Snowflake flake = new Snowflake();
    flake.SetValue(Canvas.LeftProperty, left);
    flake.SetValue(Canvas.TopProperty, top);
    this.helbed.Children.Add(flake);
}

See aga annab mulle vea:

Error: Value does not fall within the expected range.

image thumb2 User Control error: Value does not fall within the expected range.

 

Viga tuleneb sellest, et kasutajakontrollis Snowflake on mul juurelemendil x:Name määratud ning jah tõesti Silverlight rakendustes ei saa olla 100 ühe sama x:Name väärtusega objekti.

Seega lahendus on lihtne:

Eemalda kasutajakontrolli juurelemendi x:Name väärtus.

UserControl error: member names cannot be the same as their enclosing type ja Snowflake.xaml

Error    1    ‘Snowflake’: member names cannot be the same as their enclosing type    \Snowflake.g.cs

See on üks error, mida ma näen tihedamini kui ma tahaksin, sest noh loomulikult ju ei või member name sama olla kui enclosing type aga XAML maailmas ma tihtilugu ikka täiesti kogemata teen nii aga äkki pärast blogimist enam mitte?

Kuidas see viga tekib?

Olgu meil üks tore User Control (kasutajakontroll)

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="Animatsioonid.Snowflake">
        <Path x:Name="Snowflake" Width="Auto" Height="Auto"               S
              tretch="Fill" Fill="#FFD9F3F2"
              Data="F1 M 20.205,19.59L 20.205,17.7075L 18.765,
                    16.8L 17.3775,17.7075L 17.3775,19.59L
                    18.765,20.4975L 20.205,19.59 Z M 37.5825,24L 
                    34.275,24L 32.115,20.64L 29.1375,20.64L
                    31.2975,24L 27.9825,24L 25.8225,20.64L 
                    21.885,20.64L 23.805,23.8575L 27.7425,24L
                    29.4225,26.88L 25.44,26.925L 26.925,29.61L 
                    30.9075,29.76L 32.5425,32.64L 28.56,32.355L
                    29.52,33.9825L 26.31,35.805L 25.395,34.2225L" />
</UserControl>

Kõik on korras ja ühtegi viga eelnev kood ei anna… seni kuni me seda kusagil kasutada ei püüa.

Kui kasutame hakkame:

<u:Snowflake/>

Saame vea:

Error    1    ‘Snowflake’: member names cannot be the same as their enclosing type  

Mis on ilmselgelt tingitud sellest, et klassinimi on Animatsioonid.Snowflake ja Pathi selle sees ma nimetasin ka Snowflake’ks, kuigi tegelikult ei ole sellel Pathil üldse nime vaja ja kui ongi, siis ei tohiks see kindlasti olla sama kui UserControli nimi. Aga jah selle veani on võimalik jõuda siis kui ollakse liiga agar ja kõikidele asjadele nimed antakse :)

Ja neile, kes jõudsid siia otsides lumehelbe xaml-i, siis terve lumehelbe xaml kood on siin failis: Snowflake.xaml