WPF Property Binding wird im Designer nicht angezeigt

  • WPF

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

    WPF Property Binding wird im Designer nicht angezeigt

    Wenn ich Properties von Controls an meine code-behind Properties binde läuft das Programm sauber und so wie gedacht greift auch das jeweilige Binding.
    Allerdings habe ich das Problem, dass dann die gebundene Eigenschaft im Designer nicht mehr richtig angezeigt wird und das verstehe ich irgendwie nicht.

    Ich habe beispielsweise

    XML-Quellcode

    1. <Ellipse x:Name="StateIndicatorHP" Fill="{Binding IndicatorHP}"/>


    und im code-behind

    C#-Quellcode

    1. public Brush IndicatorHP { get; } = Brushes.DarkGreen;


    Zur Laufzeit funktioniert das alles super und wird auch richtig angezeigt.
    Im Designer hat die Ellipse allerdings keine Füllung.
    Ich hoffe die angehängten Bilder machen die Lage etwas klarer.

    So sieht es aktuell durch das binden aus:

    So hatte ich es mir erhofft:


    Der Fehler liegt wahrscheinlich wieder bei mir, nur ich komm nicht drauf..
    Dumm ist der, der dumm ist. Nicht andersrum!
    @florian03 So ähnlich hast du mir ja letztes mal schon geholfen :thumbup:
    Ich bin halt auch der größte Bauer in WPF ?(
    Vielen dank...mal wieder.

    XML-Quellcode

    1. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    2. d:DataContext="{d:DesignInstance Type=local:MyUserControl, IsDesignTimeCreatable=True}"

    Dumm ist der, der dumm ist. Nicht andersrum!

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

    @florian03
    Die selbe Problematik habe ich auch noch mit Image und der Property Source.

    Bsp:

    XML-Quellcode

    1. <Image Source="{Binding ImagePath}"/>

    C#-Quellcode

    1. public string ImagePath { get { return MyImagePaths.ImageXY; } }

    C#-Quellcode

    1. internal static class MyImagePaths
    2. {
    3. public static readonly string ImageXY= @"/MeinProjekt;component/Resources/imageXY.png";
    4. }


    Wenn ich allerdings string ImageXY = @"pack://application:,,,/MeinProjekt;component/Resources/imageXY.png"; mache, sehe ich es jetzt auch im Designer.
    Wie sicher schon aufgefallen ist, steh ich bei WPF noch ziemlich am Anfang, kannst du mir erklären wo hier der entscheidende Unterschied liegt?
    Dumm ist der, der dumm ist. Nicht andersrum!
    @Akanel Soweit ich den Artikel verstanden habe, besteht der Unterschied der beiden Varianten darin, dass es sich bei der einen um ein absoluten und bei der anderen um ein relativen Paket-URI handelt.
    Warum das Bild bei absolutem URI sichtbar ist und bei relativem nicht, habe ich allerdings doch nicht nachvollziehen können. Die Datei [...]/Resources/imageXY.png befindet sich in der selben Assembly/dem selben Projekt wie das UserControl in dem ich das Bild einfügen möchte.
    Zur Laufzeit funktieren beide Varianten.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Hallo

    Wenn sich ein Bild innerhalb des Projekts befindet und der Buildvorgang auf Inhalt steht und das File korrekt in das Ausgabeverzeichnis kopiert wird klappt auch beides.
    Unter verwendung des relativen Pfades wird sowohl im Designer als auch zur Laufzeit ein Bild angezeigt.
    Siehe Screenshot. Ich hoffe ich konnte damit helfen.

    Grüße
    Sascha
    Bilder
    • Anmerkung 2020-06-24 075042.png

      714,72 kB, 1.747×832, 81 mal angesehen
    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. ##

    Also so wie in deinem Beispiel geht bei mir auch beides. Die Konstellation bei mir ist ein klein wenig anders, ich setze Source ja via Binding.

    XML-Quellcode

    1. <Image Source="{Binding ImagePath}"/>

    C#-Quellcode

    1. public string ImagePath { get { return MyImagePaths.ImageXY; } }
    2. internal static class MyImagePaths
    3. {
    4. public static readonly string ImageXY= @"/MeinProjekt;component/Resources/imageXY.png";
    5. }


    Bei string ImageXY= @"/MeinProjekt;component/Resources/imageXY.png"; wird das Bild im Designer nicht angezeigt, bei string ImageXY = @"pack://application:,,,/MeinProjekt;component/Resources/imageXY.png"; allerdings schon. Der Unterschied der beiden Varianten liegt nach meinem Verständnis von @Akanels verlinktem Artikel darin, dass es sich ein mal um einen relativen und ein mal um einen absoluten URI handelt.

    Den Buildvorgang habe ich auf Resource, nicht auf Inhalt, da ich bei Inhalt nie ein Bild angezeigt bekomme, warum auch immer.
    Dumm ist der, der dumm ist. Nicht andersrum!
    OK, du Bindest als Resource ein. Da hat der Designer so seine Probleme. Den genauen Grund kenne ich auch nicht. Ich binde Bilder immer mit Buildvorgang auf Inhalt ein weil ich ein Freund davon bin die Bilder als solche im Verzeichnis liegen zu haben anstatt die DDL damit aufzubelähen. ein netter nebeneffekt ist eben das ich die Bilder jederzeit austauschen könnte ohne neu kompilieren zu müssen.

    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. ##