myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » Klick und Hover über Button soll Button verändern geht nur mit redundantem Code in XAML
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Klick und Hover über Button soll Button verändern geht nur mit redundantem Code in XAML

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
GeneVorph GeneVorph ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.02.2015
Beiträge: 85
Entwicklungsumgebung: Visual Studio 2013


GeneVorph ist offline

Klick und Hover über Button soll Button verändern geht nur mit redundantem Code in XAML

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich versuche mich gerade daran einen runden Button für ein wpf-Projekt zu erstellen. Die Form gelingt und im Prinzip bin ich mit dem Ergebnis zufrieden. Leider habe ich ein Problem bei den Triggern für verschiedene Button-Events, z. B. isMouseover etc. Ich möchte, dass beim Klicken und Hovern der Mouse sich die Farbe des Buttons ändert - das gelingt mir jedoch nur mit redundantem Code:

XML-Code:
Style TargetType="Button">
            <Setter Property="Content" Value="Black"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Grid>
                            <Path Stretch="Uniform" UseLayoutRounding="True" Fill="Aqua">
                                <Path.Data>
                                    <EllipseGeometry RadiusX="1" RadiusY="1"/>
                                </Path.Data>
                            </Path>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>

            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Cursor" Value="Hand"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Grid>
                                    <Path Stretch="Uniform" UseLayoutRounding="True" Fill="Green">
                                        <Path.Data>
                                            <EllipseGeometry RadiusX="1" RadiusY="1"/>
                                        </Path.Data>
                                    </Path>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>

                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Grid>
                                    <Path Stretch="Uniform" UseLayoutRounding="True" Fill="Orange">
                                        <Path.Data>
                                            <EllipseGeometry RadiusX="1" RadiusY="1"/>
                                        </Path.Data>
                                    </Path>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>

            </Style.Triggers>
        </Style>

Besonders dieser Teil riecht verdächtig nach code-smell:

XML-Code:
<ControlTemplate>
                                <Grid>
                                    <Path Stretch="Uniform" UseLayoutRounding="True" Fill="Green">
                                        <Path.Data>
                                            <EllipseGeometry RadiusX="1" RadiusY="1"/>
                                        </Path.Data>
                                    </Path>
                                </Grid>
                            </ControlTemplate>

Oder bleibt mit hier wirklich nichts anderes übrig, als die Form ständig neu zu erzeugen? Könnte mir BasedOn hier weiterhelfen?

Außerdem stehe ich gerade völlig auf dem Schlauch, warum man bei einem Button im Projekt den Content (z. B. "KLick mich") nicht sehen kann.

Für alle Tipps, die einem Anfänger weiterhelfen schon mal vielen Dank!

Gruß
Vorph
Neuer Beitrag 12.07.2019 17:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
witte
myCSharp.de-Mitglied

Dabei seit: 03.09.2010
Beiträge: 817


witte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du könntest dir mal das mahapps.metro-Framework anschauen. Entweder verwendest du das oder schaust im Source wie die das gemacht haben.
Neuer Beitrag 12.07.2019 17:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.159
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich würde den Style so in etwa definieren, und dann die BackgroundColor-Eigenschaft per MouseOver-Trigger ändern:

XML-Code:
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate>
            <Grid>
                <Ellipse Height="{TemplateBinding Height}"
                     Width="{TemplateBinding Width}"
                     Fill="{TemplateBinding Background}"
                     Stroke="{TemplateBinding Foreground}"
                     StrokeThickness="1"
/>
                <Label Content="{TemplateBinding Content}"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center"
/>
            </Grid>
        </ControlTemplate>
     </Setter.Value>
</Setter>

Habs jetzt nicht ausprobieren können, aber so in etwa sollte es funktionieren.
Neuer Beitrag 12.07.2019 22:47 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.07.2019 04:31