Laden...

UserControl mit TimePicker im XAML bringt Fehler "Typname nicht vorhanden"

Erstellt von robin_ vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.595 Views
R
robin_ Themenstarter:in
38 Beiträge seit 2017
vor 6 Jahren
UserControl mit TimePicker im XAML bringt Fehler "Typname nicht vorhanden"

Hi Leute,

ich bin gerade dabei, mir ein eigenes UserControl zu basteln.

Leider kann ich seit kurzem nicht mehr kompilieren, aufgrund des Fehlers (Siehe Anhang).

Da ich den Fehler jetzt schon öfters hatte und nichts damit anzufangen weiß, bitte ich euch um Rat.

Anbei der XAML-Code, wo der Fehler in Zeile 10 auftreten soll.

<UserControl x:Class="TimePicker.TimePicker"
             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" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="30" d:DesignWidth="71"
             Name="timePicker">
    <StackPanel>
      
            <Grid>
                <Grid.RowDefinitions>
                   ...
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                  ...
                </Grid.ColumnDefinitions>

                <TextBox Name="txtBoxTime"
                        Text="{Binding TimeValue, ElementName=timePicker}"
                         
                         />

                <RepeatButton Name="btnUp" Grid.Column="1" Click="btnUp_Click" BorderBrush="Black" >
                    
                </RepeatButton>
               
                <RepeatButton Name="btnDown" Grid.Row="1" Grid.Column="1" Click="btnDown_Click" BorderBrush="Black">
                 </RepeatButton>
            </Grid>
            

    </StackPanel>
</UserControl>

Danke und LG

P.S: Das Control heißt "TimePicker", genau wie der Namespace in der CB-Datei.

Fehlermeldung:
CS0426: Der Typname "x" ist im Typ "x" nicht vorhanden.

MfG Robin

16.842 Beiträge seit 2008
vor 6 Jahren

Bitte Fehlermeldung in das Error-Tag platzieren und nicht als Bild. Wenn Leute nach der Fehlermeldung suchen, wird ein entsprechender Treffer in Bildern nicht gefunden.
[Hinweis] Wie poste ich richtig? Punkt 6

Der Namespace sieht gefühlt nicht korrekt aus.

R
robin_ Themenstarter:in
38 Beiträge seit 2017
vor 6 Jahren

Hm,

also

x:Class="<namespace>.<classname>"

ist doch richtig, oder?

Es hat ja funktioniert und habe am namespace nichts geändert... ich vermute was anderes, weiß leider nicht was.

LG

MfG Robin

P
441 Beiträge seit 2014
vor 6 Jahren

Die Fehlermeldung sagt, dass der Typ TimePicker nicht im Typ TimePicker enthalten ist.
Damit das passen würde bräuchtest du folgendes Konstrukt:


class TimePicker
{
  class TimePicker
  {
  }
}

Namespaces werden in XAML / XML nicht mit der Punktnotation angegeben, sondern als xmlns Direkt
ive. Wenn es der Namespace TimePicker sein sollte müsste das schematisch so aussehen:


<UserControl x:Class="tp:TimePicker" xmlns:tp="TimePicker[;Assembly,...]">

D
985 Beiträge seit 2014
vor 6 Jahren

Also bei mir sieht so ein UserControl so aus


namespace WpfApp24.Controls
{
    /// <summary>
    /// Interaktionslogik für TimePicker.xaml
    /// </summary>
    public partial class TimePicker : UserControl
    {
        public TimePicker()
        {
            InitializeComponent();
        }
    }
}


<UserControl x:Class="WpfApp24.Controls.TimePicker"
             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" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApp24.Controls"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
            
    </Grid>
</UserControl>

849 Beiträge seit 2006
vor 6 Jahren

Kann sein das er sich hier behakt weil Namespace = Classname, das gibt auch in anderen Konstellationen immer wieder Probleme.

Ausserdem (sorry WPF ist schon ein bisschen her..) meine ich, das der Editor die USercontrols in der Assembly sucht. Versuch mal das Xaml zu schliesen, kompilieren und dann wieder zu öffnen.

R
robin_ Themenstarter:in
38 Beiträge seit 2017
vor 6 Jahren

Bin gerade verschiedene Sachen am probieren, weil ich wie unconnected das Gefühl habe, dass VS hier sehr durcheinander kommt.

Wenn ich ein neues Control erstelle, und den Namespace in der cs-Datei anpasse (z.B. ein "a" hintendran hänge) und anschließend in der XAML x:Class - deklaration, kriege ich eine Fehlermeldung. Dieses mal jedoch > Fehlermeldung:

CS0103: Der Name "InitializeComponent" ist im aktuellen Context nicht vorhanden.

Das dürfte eigentlich m.E.n. nicht passieren, oder?
Ich habe es jetzt paar mal ausprobiert und mir ist aufgefallen, dass ich den Namespace nicht ändern kann bzw. der Namespace immer gleich der ProjektDatei benannt sein muss.

Vielleicht ist das normal und mir war es dann bis jetzt nicht bekannt 😉 Finde das nur komisch.

LG

/EDIT: Die Vermutung mit der ProjektDatei scheint nicht zu stimmen, sobald man die Projektdatei umbenennt. Glaube ich bin da total auf dem Holzweg... Kann mich jemand aufklären?

MfG Robin

D
985 Beiträge seit 2014
vor 6 Jahren

Du weißt, dass so ein Visual aus drei Dateien besteht?*XAML: foo.xaml *CS: foo.xaml.cs *Generated CS: foo.g.i.cs (wird von VS aus der foo.xaml erzeugt)

Wenn du den Namespace ändern möchtest, dann musst du die Änderungen sowohl in der \*.xaml als auch in der \*.xaml.cs vornehmen.

Die Reihenfolge ist egal, aber erst wenn du den Namespace in beiden Dateien geändert hast, dann kann VS die korrekte \*.g.i.cs dazu erzeugen und dann klappt es auch mit dem Nachbarn.

Alles, was während des Änderns (zwei Dateien gleichzeitig bearbeiten geht halt nicht) an Fehlern angezeigt wird, ist nachvollziehbar und kann vernachlässigt werden.

R
robin_ Themenstarter:in
38 Beiträge seit 2017
vor 6 Jahren

Ja, das ist mir bewusst.

Und ja, ich änder den Namespace in der .xaml und in der .xaml.cs - Datei.

Dachte das wäre hiermit klar geworden:

den Namespace in der cs-Datei anpasse (z.B. ein "a" hintendran hänge) und anschließend in der XAML x:Class - deklaration

Also, ja in der kurzen Zeit, wo die beiden Dateien nicht synchron sind, ist es ja logisch, das ein Fehler kommt 😉

Mir geht es aber um den Zeitpunkt, wo beide Namespaces exakt gleich sind und der Fehler nach dem kompilieren und VS neustarten immer noch existiert.

Und sobald ich den NameSpace auf den ursprünglichen änder (Der ursprünglich ja mal gleich der ProjektDatei war), geht wieder alles...

LG

MfG Robin