Habe einen TextBlock und möchte beim Klick darauf (egal ob mit Maus oder Tastatur) ein Ereignis ausgelöst haben. Wäre auch schön, wenn der Mauszeiger sich als Hand verwandeln könnte wenn man darüber fährt.
Die Frage: Wie gehe ich im besten Fall vor.
Jeweils ein MouseDown und KeyDown Event erstellen wo die Methode aufgerufen wird?
G
Oder ist eine TextBox dafür besser geeignet?
In WPF arbeitet man nicht direkt mit Events; das ist in WPF so nicht wirklich vorgesehen.
[Artikel] MVVM und DataBinding
Im Falle von Events wie MouseDown würdest Du zB. einen Event-Trigger definieren, der auf MouseDown
hört und dann einen Command auslösen (InvokeCommand)
Siehe auch Handling events in an MVVM WPF application
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Außerdem gibt es in WPF für diesen Zweck bereits den HyperLink.
Zum Erstellen von speziellen Mouse-Over-Effekten o.ä. würde man mit Styles arbeiten. Siehe dazu [Artikel] MVVM und DataBinding, Abschnitt 4. Styles und Trigger
Weeks of programming can save you hours of planning
Außerdem gibt es in WPF für diesen Zweck bereits den
> .
Habe das mal folgendermaßen eingebunden:
<TextBlock>
<Hyperlink NavigateUri="ApplicationCommand.Copy" >
<TextBlock Name="tb_NameBox" />
</Hyperlink>
</TextBlock>
Der Text in der Box wird zwar wie ein Link angezeigt, allerdings wird nichts kopiert.
ApplicationCommands.Copy
(wie auch die anderen) sind ja auch Commands
und keine Uri, deshalb mußt du es an Hyperlink.Command binden.
Und genau da liegt mein Problem, das ich nicht weis wie und was. Gibt es dafür auch einen FAQ Artikel?
Gibt es noch eine Möglichkeit das ganze so zu machen, dass alle TextBlock diese Methode haben?
Steht doch auch im MVVM-Artikel unter "Commands".
Bzw. direkt (ohne ViewModel):
<Hyperlink Command="ApplicationCommands.Copy">
PS: Um alle Textblöcke damit zu versehen, verwende Styles (s.a. Wie kann ich nur die Elemente stylen, die sich in einem StackPanel befinden?).
Und wenn ich dies genau so machen, bekomme ich folgende Meldung zurückgeworfen:
XDG0008 "ApplicationCommand" wird in einem Windows Presentation Foundation (WPF)-Projekt nicht unterstützt.
Edit: Ich sehe gerade, es muß ja auch
"ApplicationCommands.Copy"
(Plural) lauten!
Danke das war der Fehler gewesen.
Allerdings bin ich zu doof, wie kann ich jetzt auswählen was kopiert werden soll wenn man darauf klickt?
Dafür gibt es noch das HyperLink.CommandTarget.
@habib
Bitte beachte [Hinweis] Wie poste ich richtig?
1.1 Erst suchen und in die Doku schauen, dann posten
1.2 Nur ein Thema pro Thread
Ein Blick in die Doku hätte das Problem mit dem fehlenden "s" innerhalb von einer Minute gezeigt. Und bitte erstelle jeweils einen Thread pro Frage. Hier geht es um das Auslösen den Click-Ereignissen bzw. Commands, nicht um das Arbeiten mit der Zwischenablage.
Weeks of programming can save you hours of planning
Habe dazu mal eine kleine Frage, hoffe das ist erlaubt.
Bei Buttons verwendet man allerdings weiter ein Click Event, oder?
Nein, bei WPF arbeitet man mit MVVM und damit respektive mit Commands.
[Artikel] MVVM und DataBinding
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Es gibt hunderte Bücher; nicht nur das eine. Welches meinst Du?
Man braucht bei WPF nur in ganz gewissen Fällen Events.
Ansonsten macht man alles über Commands.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Windows Presentation Foundation: Das umfassende Handbuch zur WPF, aktuell zu .NET Core 3.0
von Thomas Claudius Huber.
Hab mal einen Screen angefügt.
Es ist in Büchern und in Tutorials üblich, dass man Code, der nicht mit dem konkreten Beispiel zutun hat, vereinfacht.
Hier geht es offenbar um das StackPanel und nicht zu Commands. Hast Du Dir das Kapitel zu den Commands überhaupt schon durchgelesen?
WPF ist auf den MVVM Pattern ausgelegt und im MVVM Pattern gibt es keine Events.
Ich kenne Thomas' aktuelle Fassung des Buchs nicht, aber ich bin mir sehr sicher, dass das auch in dem Buch steht.
Aber wenn es Dich verwirrt, dann gib ihm Feedback.
Thomas' is nen sehr netter und auch aktiv in der .NET Community; man erreicht ihn zB auf Twitter ganz gut.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Bin gerade dabei Commands durchzuarbeiten.
Danke für den Tipp mit dem Feedback geben.
Man braucht bei WPF nur in ganz gewissen Fällen Events.
Welche wären das?
Wenn ich nur ein Click Event habe, wäre es da nicht günstiger das ganze über Eventhandler zu machen? Ist am Ende ja nur ein kleines Tool.
Eine Technologie interessiert es nicht, ob Deine Anwendung groß oder klein ist - das ist alles relativ.
WPF ist einfach auf MVVM und damit Commands ausgelegt.
Nur Du selbst kannst entscheiden, wie pragmatisch Du Deinen Code umsetzt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code