Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 312
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Hochwertige (optisch ansprechende) WPF - Buttons


Autor: DotNetMastermind
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 10295
  
Kick it on dotnet-kicks.de  

Beschreibung:

Bei den meisten WPF-Anwendungen kann man auf den ersten Blick gar nicht erkennen, dass es sich um eine WPF-Anwendung (und nicht um eine WindowsForms-Anwendung) handelt, da die Controls nahezu identisch aussehen, bis auf die zum Teil verschwommene Optik bei den WPF-Controls (aufgrund des Rendering der DirectX-Engine).

Da die meisten Programmierer im Allgemeinen nicht auch noch als Designer/Grafiker tätig sind, werden die Standard-Controls vom .Net-Framework ohne große Änderungen übernommen.

Da aber jeder Anwender heutzutage eine optisch ansprechende Oberfläche erwartet (wie es die Anwender vom Web 2.0 gewohnt sind), sollte man seine Anwendungen optisch „tunen“.

Ich kann nicht nachvollziehen, dass fast alle grafischen Oberflächen (Webseiten) im aktuellen Web 2.0 bis zum letzten Bedienelement durchgestylt sind, die Client Applikationen jedoch immer noch so aussehen wie vor vielen Jahren.

Fangen wir bei diesem Snippet mit einfachen Buttons an ...

Es genügt ein einfaches ControlTemplate zu erstellen um per DynamicResource-Binding alle gewünschten Buttons hochwertiger aussehen zu lassen :
siehe XAML-Code unten

Dieses Template wird als Window.Resource oder als Grid.Resource festgelegt. Um das Template zu nutzen, muss lediglich folgender Code zu dem gewünschten Button hinzugefügt werden :
Template="{DynamicResource BlackButton} Foreground="White"


Beispielsweise :
Button Name="btn2" Content="NextGen Button" Margin="0,110,0,0" Width="110" Height="30"
HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="White"
Template="{DynamicResource BlackButton}"


Noch besser sieht das ganze natürlich aus, wenn man den Hintergrund dazu passend auch noch optisch aufwertet. Hierzu legt man lediglich einen passenden LinearGradientBrush an, welchen man dem Grid als Hintergrund zuweist :
LinearGradientBrush x:Key="GridBackgroundBrush" StartPoint="0,0" EndPoint="0,1"
GradientStop Offset="0" Color="Black"/
GradientStop Offset="0.7" Color="DimGray"/
GradientStop Offset="1" Color="Gray"/
/LinearGradientBrush

Grid Background="{StaticResource GridBackgroundBrush}"



Abgelegt unter: GUI, XAML, WPF, Button, Control, Template, Triggers, LinearGradientBrush, Optik, optisch ansprechend, aufwerten, schick.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<Window x:Class="NextGenButtons.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title=".Net-Snippets - NextGenButtons" Height="250" Width="350">

  <Window.Resources>
    <LinearGradientBrush x:Key="GridBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
      <GradientStop Offset="0" Color="Black"/>
      <GradientStop Offset="0.7" Color="DimGray"/>
      <GradientStop Offset="1" Color="Gray"/>
    </LinearGradientBrush>
    
    <ControlTemplate x:Key="BlackButton" TargetType="{x:Type Button}">
      <Border BorderBrush="White" BorderThickness="1" CornerRadius="3">
        <Border BorderBrush="DarkGray" BorderThickness="1" CornerRadius="3">
          <Grid Name="ButtonGrid">
            <Rectangle Name="ButtonRect">
              <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                  <GradientStop Offset="0" Color="Gray" />
                  <GradientStop Offset="0.49" Color="DimGray" />
                  <GradientStop Offset="0.5" Color="DimGray" />
                  <GradientStop Offset="1" Color="Black" />
                </LinearGradientBrush>
              </Rectangle.Fill>
            </Rectangle>
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" />
          </Grid>
        </Border>
      </Border>
      <ControlTemplate.Triggers>
        <!-- Bei Mausbewegung über den Button ... -->
        <Trigger Property="IsMouseOver" Value="True">
          <!-- Buttonhintergrund heller darstellen -->
          <Setter Property="Fill" TargetName="ButtonRect">
            <Setter.Value>
              <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="Silver" />
                <GradientStop Offset="1" Color="Black" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
          <!-- Leuchteffekt -->
          <Setter Property="BitmapEffect">
            <Setter.Value>
              <OuterGlowBitmapEffect GlowColor="White" GlowSize="5" />
            </Setter.Value>
          </Setter>
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
          <Setter Property="Fill" TargetName="ButtonRect" Value="#FF000000" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Window.Resources>

  <Grid Background="{StaticResource GridBackgroundBrush}">
    <Button Name="btn1" Content="Einfacher Button" Margin="0,50,0,0" Width="110" Height="30"
            HorizontalAlignment="Center" VerticalAlignment="Top" />

    <Button Name="btn2" Content="NextGen Button" Margin="0,110,0,0" Width="110" Height="30"
            HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="White"
            Template="{DynamicResource BlackButton}"/>
  </Grid>

</Window>

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

RoSi schrieb am:  08.10.2010 12:15:31

"Ich kann nicht nachvollziehen, dass fast alle grafischen Oberflächen (Webseiten) im aktuellen Web 2.0 bis zum letzten Bedienelement durchgestylt sind, die Client Applikationen jedoch immer noch so aussehen wie vor vielen Jahren."
Weil nicht alle Anwender von der klicki-bunti-Fraktion sind und vielen mir bekannten nur das Ergebnis wichtig ist, wobei lediglich Wert auf eine übersichtliche Oberfläche gelegt wird. Nicht jeder Anwender ist zw. 16 und 25 Jahre alt.
DotNetMastermind schrieb am:  08.10.2010 14:15:04

@ RoSi

1. Optisch ansprechende Webseiten werden viel stärker frequentiert.
2. Optisch ansprechende Oberflächen bzw. Controls haben bis jetzt jeden Anwender - vor allen Dingen Entscheidungstgräger - mit welchem ich geschäftlich zu tun hatte beigeistert (auch die jenseits der 25 Jahre - bin selbst auch >30)
3. Ein Indiz für die Notwendigkeit solcher Controls ist auch, dass nicht ohne Grund etlich Anbieter von zusätzlichen Komponenten (devExpress, Infragistics etc.) exisitieren

Mit diesem Scnippet wollte ich die Vorlage für die Erstellung eigener hochweriger Buttons (ohne den Einsatz von Fremdkomponenten) bieten. Damit ist es mit einfachen Mitteln möglich seine Anwendung aufzuwerten.

Und diese "Anti-klicki-bunti Diskussion" wird meistens von denen geführt, welche eine Aufwertung Ihrer Anwendung für irrelevant halten !
DotNetMastermind schrieb am:  08.10.2010 14:18:58

* sorry für die Rechtschreibfehler ...
Jan Welker schrieb am:  08.10.2010 17:20:33

Hier ist ein Screenshot von dem Button: http://twitpic.com/2vpfmw
RoSi schrieb am:  09.10.2010 13:41:07

Nehme ich gern zur Kenntnis, habe übersehen, dass es unterschiedliches Klientel gibt. Dann kommen wir uns nicht ins Gehege. Auch gut. Meine Fraktion ist die "Wo steht das Ergebnis, wie komme ich hin?". In gewissen Finanzbereichen zählen halt nur harte Fakten. Im Übrigen ist dafür IMHO Google der beste Beweis. Eine fast weiße Seite, ohne viel Gedöhns drumherum liefert die besten Suchergebnisse. Als sie davon abwichen und den Weg von Bing einschlugen, war das Geschrei groß. Eine Bank interessiert auch nur peripher, wie die Zahlen verpackt sind, um eine Kreditzusage zu erteilen.
DotNetMastermind schrieb am:  10.10.2010 10:33:48

Google ist in diesem Fall eine Ausnahmeerscheinung, aber auch nur für den Bereich Webseite/Suchmaschine.

Im Bereich der Client-Software habe ich im Rahmen einer Fallstudie eine WPF-Applikation vollständig optisch aufgewertet (unter anderem mit den "NextGenButtons").

Beide Applikationen erfüllten den gleichen Zweck und es bestand bei den zur Verfügung stehen Funktionalitäten keine Abweichungen.

Dennoch fanden nahezu 90% der Probanden die optisch "getunte" Variante moderner, hochwertiger und was am interessantesten ist sogar besser.

Obwohl beide Programme die gleiche Funktionalität besaßen, empfanden ca. 90% der Probanden die optisch "getunten" Variante als besser ?!

Moderne Oberflächen surregieren dem Anwender eine bessere, stabilere und hochwertigere Anwendung ...
DotNetMastermind schrieb am:  10.10.2010 22:09:43

* habe natürlich "suggerieren" gemeint ...
DotNetMastermind schrieb am:  13.10.2010 01:24:44

@RoSi

Bezüglich der Relevanz einer hochwertigen Oberfläche hier ein aktuelles Statement :
"Die Software der Zukunft wird über ihr Aussehen verkauft. Und ob das gefällt, entscheidet einzig und allein der Käufer. Um erfolgreiche Software zu entwickeln, müssen also zwingend die Bedürfnisse und Ansprüche des Users im Vordergrund stehen."
Quelle : http://www.gui-design.ppedv.de/
> 1. Fachkonferenz rund um Grafische Benutzeroberfläche und Design <


Diese Snippets könnten für Sie interessant sein:
[C#] Threadsichere GUI Änderungen
[C#] Events aus Worker-Thread im GUI-Thread werfen! Kein Invoke!
[C#] Maus Sanduhr zeigen wenn Methode ausgeführt wird
[C#] WPF - Buttons "OK/Cancel" - endlich unverwechselbar -
[C#] Visuelles Feedback fokussierter Text Boxen
[C#] TextBlock animiert ein- und ausblenden
[C#] Alle verfügbaren Farben mittels WPF ausgeben
[C#] WPF Formulare dynamisch laden
[C#] XAML Grundlagen in Silverlight 3
[C#] Daten aus einer Datenbank in WPF darstellen
[C#] WPF-Steuerelemente in Windows Forms-Anwendung nutzen
[C#] Transparente WPF-Anwendung
[C#] Rechtschreibhilfe in .NET WPF Anwendung integrieren
[C#] WPF: Image aus dem Web in Image-Element anzeigen
[C#] Handle eines WPF Fensters ermitteln
[VB.NET] Theme für WPF-Anwendungen anwenden
[C#] WPF Fenster mit Aero Glass
[C#] Bilder aus *.resx Ressourcen Dateien in WPF verwenden
[C#] RoutedEvent erstellen
[C#] Automatische Anpassung der Breite von GridViewColumns
[C#] TaskDialog anzeigen
[C#] User-Management für WPF Smart Client Anwendung
[C#] old Windows Forms Image to new WPF Image
[C#] FolderBrowseDialog in WPF
[C#] WPF Shortcut
[C#] Drag-and-Drop-Binding in .NET 4
[C#] Spalten des WPF-DataGrid in .NET 4 anpassen
[C#] WPF-Anwendung mit .NET 4 entwickeln
[C#] WPF Tutorial: Auf Datenbankinhalte mit WCF zugreifen
[C#] WPF: Mit Validation Rules Eingaben validieren
[C#] WPF: Rechtschreibhilfe in Anwendung integrieren
[C#] WPF-Splash-Fenster
[VB.NET] Ist Silverlight im Design Modus oder in der IDE (WPF)
[C#] Ribbon-Oberfläche in WPF implementieren
[C#] InputBox WPF C#
[ASP.net] Submit Button für einen Bereich
[ASP.net] Button Click -> neues Fenster
[ASP.net] Type eines belibigen Controls bestimmen
[VB.NET] Oft benötigte Properties von Controls schnell zentral ausfüh
[VB.NET] Das Klick-Event von Controls gemeinsam auffangen und zentral
[C#] Fading MessageBox ohne Buttons
[C#] Button mit Hintergrundbild
[VB.NET] Webcam in PictureBox anzeigen
[C#] Doppelbufferung für Steuerelemente aktivieren
[C#] Transparenter Hintergrund beim Steuerelement
[C#] CursorChanger
[ASP.net] NullReferenceException
[VB.NET] ControlResize wie in der IDE auch zur Laufzeit
[C#] Generischer Invoker für Windows Form Controls
[ASP.net] Formularelement fokusieren auf Ajax Seiten
[C#] Threadsichere und generische Kommunikation Windows Forms
[C#] Controls gleichen Typs von einem Container in Winform holen
[C#] Eigenschaften aller Steuerlemente eines Formulars setzen
[VB.NET] Alle Textboxen zurücksetzen
[ASP.net] bestimmtes Control auf der aspx-Seite finden
[VB.NET] Linien u. Kreise a la VB6 - Einfach Zeichnen
[C#] iTunes-ProgressBar
[C#] WaterBox
[VB.NET] Alle Controls einer Form Enablen/Disablen
[C#] Löschen aller TextControls auf einer Form in C#
[VB.NET] Control Resize wie in der IDE auch zur Laufzeit - Extended
[VB.NET] List all controls by using the name of the controls
[C#] Custom Toolstrip Renderer
[C#] Prüfen ob in einem Verzeichnis Schreibrechte verfügbar sind!
[C#] Darstellung eines ASP.NET Steuerelementes als HTML-String
[C++] Wiederholungen mit Templates

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.