UserControl Internal Class im XAML Desinger bringt Fehler

  • WPF

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Schmittmuthelm.

    UserControl Internal Class im XAML Desinger bringt Fehler

    Ich habe ein UserControl erstellt und möchte die Klasse auf internal setzen.

    C#-Quellcode

    1. using System.Runtime.CompilerServices;
    2. [assembly: InternalsVisibleTo("Machine")]
    3. namespace UtilityUc
    4. {
    5. internal partial class UcCylinderMonostable : UserControl
    6. {
    7. }
    8. }


    Im XAML-Designer von UcCylinderMonostable habe ich

    XML-Quellcode

    1. x:ClassModifier="internal"


    In "Machine" habe ich nun wieder ein UserControl, genannt "UcSetup", in welches ich ein bzw. mehrere UcCylinderMonostable setzen möchte.
    Im Code-Behind im Namespace "Machine" kann ich wie erwartet/erhofft ganz normal auf UcCylinderMonostable zugreifen.

    Im XAML-Designer von "Machine" bekomme ich dann allerdings den Fehler "Auf den Typ 'UcCylinderMonostable' kann nicht zugegriffen werden."


    Bin in WPF noch neu und habe auch nach langer Suche nichts gefunden, was mir geholfen hat.

    Vielleicht noch eins, bislang war UcCylinderMonostable public, soll nun eben internal werden.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Hallo

    Ich hatte selbst den Fall nocht nicht das ich Controls internal brauchte aber ich nehme stark an das der Designer nicht darauf zugreigen kann da es ein anderer (eigener) Prozess ist und du diesen ja nicht freigegeben hast. Der Designerprozess ist ja nicht "Mashine".

    Aber um genaueres zu sagen müsste ich das mal selbst probieren. Interessiert mich, heute habe ich nur sehr wenig Zeit.
    Aber warum verbirgt man sich seine Controls? Für mich macht das jetzt keinen Sinn. Du wirst sicher Grüne haben aber mir fallen jetzt keine ein.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m
    Wir sollen für einen Kunden ein "großes" Usercontrol und diverse DLLs bereitstellen, die er für seine WPF Anwendung braucht um mit seiner Maschine zu arbeiten.
    Das Gesamt-Usercontrol beinhaltet wiederum einzelne Usercontrols die digitale In- und Outputs oder auch Zylinder etc. darstellen (mit entsprechenden Features versteht sich). Wir wollen ihm quasi nur das Gesamt-Usercontrol bereitstellen, nicht aber die einzelnen Controls für In - und Outputs. In der Einzel-UserControl-DLL befinden sich allerdings auch einige Controls (beispielsweise für einen automatischen Maschinenablauf) auf die er Zugriff haben soll.

    Daher der Wunsch die übrigen, die ihn nichts angehen, auf internal zu setzen.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Mmmhhh.

    OK, da ich den Fall nocht nicht hatte werde ich das morgen selbst mal ausprobieren und sehen ob ich hier eine Lösung finde.
    Muss ich dich leider vertrösten.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Alsoooooo. Ich hatte nun kurz Zeit das selbst mal zu probieren. Und was soll ich sagen, das klappt sogar, obwohl es mich wundert. Aber die WPF überrascht mich auch heute noch ;-).

    Ich habe ein UserControl erstellt welches "Internal" (oder in VB eben Friend) sein soll und eines welches wie üblich Public ist.
    Das UserControl welches Public ist enthält ein UserControl welches nur "Friend" ist. Uns sowohl im Designer als auch zur Laufzeit wird alles korrekt angezeigt. ?(






    Und sowohl in der Intellisense als auch in der Toolbox scheint aber nur das Public UserControl auf, deinem Kunden wird also der direkte Zugriff verwehrt.
    Klasse sache ;)



    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hatte es so bereits schon gemacht und eben auch noch mal getestet, es will bei mir einfach nicht funktionieren.


    Alles kompiliert sauber und das Programm läuft auch nach wie vor so wie es soll, nur im Designer von der public UserControl will es einfach nicht.
    Kann es daran liegen, dass mein public UserControl in einem anderen Namespace ist als die internal/friend UserControls? Wenn ja versteh ich es scheinbar nicht richtig wie internals arbeitet ?(

    Das ist jedenfalls der einzige Unterschied den ich jetzt zu deinem Test ausmachen konnte.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Hallo

    Evtl. kann das sein das hier die Namespaces eine Rolle spielen. Aber ich glaube es irgendwie nicht.
    Der Designer ist oft so ne Sache.
    Probier mal bitte das Projekt zu bereinigen. und dann das "Internal" Ucl auszukommentieren oder besser den Code des Usercontrols welches in dem Public Usercontrol liegt komplett aus diesem zu entfernen.
    Dann die Projektmappe(!!) neu zu erstellen und erst wenn da keine Fehler im Deisnger sind dann erst füge den Code für das Internal UserControl im Public Usercontrol wieder ein.

    Da bin ich jetzt gespannt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Sorry, war gestern den ganzen Tag unterwegs..
    Hat leider keine Verbesserung gebracht.

    EDIT:
    Habe eben noch mal den selben Test wie du gemacht, sprich im selben Projekt/Namespace ein internal UC in ein public UC eingefügt, da funktioniert alles wie gewollt und auch wie in deinem Test.

    Vielleicht habe ich den Sachverhalt auch noch nicht richtig beschrieben:

    Ich habe eine Projektmappe mit verschiedenen Projekten.
    Projekt "ProjUcKunde", Projekt "ProjUcFirmenintern".
    Das Projekt ProjUcKunde beinhaltet ein pubic UserControl, welches auch vom Kunden voll genutzt werden soll.
    Das Projekt ProjUcFirmenintern enthält( bzw. soll enthalten) sowohl public als auch internal UserControls.
    ProjUcKunde hat einen Verweis auf ProjUcFirmenintern, da ich in dem einen Kunden-Usercontrol diverse, eigentlich sogar alle, firmenintere-Usercontrols einfügen und nutzen will.
    Im ProjUcFirmenintern sind auch 3 Usercontrols die public sind, da diese ebenfalls vom Kunden genutzt werden sollen. Das UserControl im ProjUcKunde ist speziell für eine Maschine, die public UserControls In ProjFirmenintern sind global bzw. universell für diverse Maschinen nutzbar, deshalb die Trennung.

    Die internal UserControls in ProjFirmenintern sollen daher quasi in einem anderen Projekt verfügbar sein. Ich hatte gehofft, dass das eben durch

    C#-Quellcode

    1. using System.Runtime.CompilerServices;
    2. [assembly: InternalsVisibleTo("ProjUcKunde.GewünschterNamespace")]


    machbar ist, aber scheinbar ist das so nicht gedacht, oder ich bin einfach zu dumm dafür
    Dumm ist der, der dumm ist. Nicht andersrum!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Schmittmuthelm“ ()

    Hallo

    Dann stelle hier mal ein Demo-Projekt Online bei dem es nicht funktioniert.
    Mal sehen was es da hat.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Der Test beinhaltet jetzt
    -ProjUcFirmenintern
    -ProjUcKunde
    -WpfAppTest

    Bitte das Projekt/die Projektmappe der WpfAppTest öffnen, die beinhaltet schon die beiden Projekte Kunde und Firmeninter, so wie es bei mir auch ist.
    ProjUcKunde hat einen Verweis auf ProjUcFirmenintern, WpfAppTest hat Verweise auf beide ProjUcXXX.
    In Firmenintern ist ein Uc public, eins internal.
    In der WpfAppTest kann ich wie gewünscht nur auf die Public Geschichten zugreifen.
    In ProjUcKunde ist es leider auch auf die public UCs von ProjFirmenintern begrenzt, trotz "InternalsVisibleTo..."

    TestInternalUsercontrol.zip
    Dumm ist der, der dumm ist. Nicht andersrum!