Add Setter, Style via Code, steh auf der Leitung...

  • WPF

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    Add Setter, Style via Code, steh auf der Leitung...

    2tes Thema heute :D...
    Wenn ich aus dem Clipboard ein Screenshot mit CTRL+V einfüge, dann wird es immer in der Mitte angezeigt. Die möchte ich ändern dass es immer Links ist.

    geht wunderbar per XAML

    XML-Quellcode

    1. <RichTextBox.Resources>
    2. <Style x:Key="{x:Type Image}" TargetType="{x:Type Image}">
    3. <Setter Property="HorizontalAlignment" Value="Left" />
    4. </Style>
    5. </RichTextBox.Resources>


    Das möchte ich nun auch hinzufügen im Code behind wenn eine RTB neu erzeugt wird.

    Mein Ansatz war

    VB.NET-Quellcode

    1. Dim Style As Style = New Style With {.TargetType = GetType(Image)}
    2. Dim Setter As Setter = New Setter With {.Property = HorizontalAlignmentProperty, .Value = HorizontalAlignment.Left}
    3. Style.Setters.Add(Setter)
    4. RTB.Style = Style


    Ist überhaupt irgendwas richtig bei meinem Ansatz?:D
    Fehlermeldung von VS ist: ''Image' TargetType does not match type of element 'RichTextBox

    r0tzi schrieb:

    Ist überhaupt irgendwas richtig bei meinem Ansatz?

    Insofern nicht das ich dir im letzten Post bereits gesagt habe das du mit Binding und DataTemplates arbeiten sollst anstatt Controls im code zu erzeugen.

    WPF gibt dir hier ein wirklich cooles und Leistungsstarkes Werkzeug in die Hand und du legst es auf die Seite und machst mit einem Holzhammer weiter.

    Auch wenn du hsier wieder eine Lösung bekommst, in einer Stunde kommst du an das nächste Problem. Und dann an das nächste.

    Warum beschreibst/zeigst du nicht was du vorhast und wir finden sicher eine einfach aber viel effektivere Methode das zu machen ohne das du "dich" verbiegen musst. Ich denke das wäre in deinem Sinne oder?
    Und du wirst sehen, da gibt es bestimmt einen Weg mit VIEL weiger Code und vorallem leichter wartbaren Code.

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

    Okay, du hast es so gewollt :D

    Also, ein Tabcontrol über die komplette Userform: Es existiert nur 1 Tab links. Auf diesem steht nur "+"
    Bei einem doppelklick darauf, wird ein neuer Tab hinzugefügt Header="Neuer Tab". Doppelklick auf diesen, kann man den Headertext per Inputbox anpassen.
    Eine RTB wird in dem neu generirten Tab eingefügt. (Diese RTB soll nunmal gewisse Eigenschaften haben)

    Bei erneutem drücken auf das + wiederholt sich das Spiel von vorne.. also dynamisch.. Quasi wie ein Projektbuch jeder tab is ein projekt mit beschreibung usw...

    Das ganze soll letztendlich auf eine SQL Datenbank gespeichert und wieder geladen werden.
    Natürlich können auch wieder Tabs gelöscht werden etc.. das ist ja aber dann eher sagen wir mal die anfacheren funktionen.
    Hallo @r0tzi

    r0tzi schrieb:

    könnte mir derzeit doch jemand verraten wie ich diesen style/setter hinzufügen kann?

    Echt ungern da es schlichtweg der falsche Weg ist. Ich könnte mit einem Auto auch Rückwärts durch die Stadt fahren, aber kein Fahrlehrer in der Fahrschule wird dir zeigen wie das am besten geht. Vieleicht ein dummer vergleich aber dennoch wird glaube ich klar was ich meine.

    Ich habe dir mal ein Beispiel zusammengestellt welches alle deine Punkte erfüllt. Viel spaß beim durchsehen.
    Wenn du Fragen hast tuh dir keinen Zwang an.

    Grüße
    Sascha
    Dateien
    • WpfTabDemo.zip

      (1,83 MB, 5 mal heruntergeladen, zuletzt: )
    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. ##

    Neu

    Hallo,

    @r0tzi
    Wenn ich dich mal fragen darf? Was spricht gegen Binding und DataTemplates.
    Klar am Anfang, geradee wenn man WinForms gewöhnt war, klingt das sehr ungewohnt und auch kompliziert.
    Aber wenn du es einmal verstanden hast (so wie ich) - und @Nofear23m (und so weit wie ich kann auch ich) werden dir dabei sicher helfen - willst du einfach nicht mehr zurück, es gibt so viel mehr Funktionen und es geht vieles um ein einiges einfacher.
    Glaub mir, ich spreche da aus Erfahrung.

    Viele Grüße
    Florian
    Meine Website
    Mein Projekt: SnippetLibrary

    Neu

    Hi ja ich glaube euch das gerne und die sachen von euch schaue ich mir auch immer an und habe schon teile übernommen und arbeite damit.
    Nun die meissten fragen die ich stelle, sind "leider" nicht für neue projekte sondern alte, und die muss ich einfach updaten und die sind alle per code geschrieben. Das nun umzubauen (oder erstmal lernen wie), fehlt mir schlichtweg die zeit.

    In diesem aktuellen Fall, habe ich ein Feedback bekommen, dass das Alignment der Bilder geändert werden soll.. also left zB.. und ja das würde ich nun gern schnell hinzufügen... da sind 2-3 zeilen code eben zielführender.

    hab mir das projekt von nofear angeschaut, geladen und gespeichtert und werde sobald ich dazu komme, es umbauen um es zu lernen.

    Hab leider im moment nur älteres zeug wo ich warten muss. btw. habs immernoch nicht hinbekommen per code -.-

    Neu

    Ohne mich groß einmischen zu wollen, da ich sowohl Rotzis als auch NoFears und Floris "Seite" verstehen kann, aber wie wäre es wenn du dir einfach eine entsprechend per XAML konfigurierte auf deine Bedürfnisse angepasste RTB als UserControl erstellst ?
    Wobei ich NoFear wirklich recht geben muss, ich hab mich auch Ewigkeiten gegen Binding gesträubt, und ich begreife sicherlich vieles davon nach wie vor nicht, aber seit ich in den sauren Apfel gebissen und es einfach verwendet hab, will ich es einfach nicht mehr hergeben.


    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Neu

    Hallo @r0tzi

    r0tzi schrieb:

    gibt es eine lösung für mein problem?

    Ja, auch mittels Styles die per Code "erzeugt" bzw. "zugewiesen" werden. Die Lösung will ich dir auf keinen Fall geben weil es hier dann zu sehr unerwünschen nebeneffekten kommen kann. Du verlierst auch total den Überlick welches Stle du nun für was hast. 1x im XAML ein paar Styles, dann noch welche die erst zur Laufzeit erstellt werden usw. Nicht gut.

    Aber:

    r0tzi schrieb:

    dass das Alignment der Bilder geändert werden soll

    Warum setzt du dann nicht einfach für das Bild (welches laut deinem Post ja zur Laufzeit und per Code erstellt wird) das Alignment? Warum ein Style. Setzte den Wert und fertig.

    Ansonsten würden wir mehr Details benötigen.

    Klar ist das Forum da um eine Lösung zu finden. Aber...... niemand hier will die etwas raten wo wir genau wissen das es nach hinten los geht weil du dir damit nur "noch mehr" Probleme einhandelst. Ich hoffe du kannst das verstehen.

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

    Neu

    Hi, nun es ist bisher noch nie etwas nach hinten losgegenagen was du mir gegeben hast, hat alles wunderbar funktioniert ;)

    Nicht das Bild wird erstellt, sondern die RTBs
    das bild ist z.B. im clipboard eingefügt und wenn man es mit CTRL+V in die RTB einfügt, wird es IMMER in der mitte eingefügt. Das möchte ich eben links nun haben. Und dafür soll diese property sein, für mehr nicht.

    Neu

    Nun gut:

    VB.NET-Quellcode

    1. Dim style As New Style(GetType(Image))
    2. style.Setters.Add(New Setter(Image.HorizontalAlignmentProperty, HorizontalAlignment))
    3. Resources.Add(GetType(Image), style)


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