Stile del pulsante WPF C #

Qualcuno saprebbe come ricreare questo stile di pulsante in WPF? Dato che non so come creare i diversi compartimenti. Così come i 2 diversi testi e stili di testo?

inserisci la descrizione dell'immagine qui

Per risolvere la tua domanda devi assolutamente usare lo Style e il Template per il Button . Ma come appare esattamente? Le decisioni possono essere diverse. Ad esempio, Button sono due testi per definire meglio i TextBlocks rilevanti? Può essere direttamente nel modello, ma poi utilizzare i pulsanti sarà limitato, perché il modello può essere solo un ContentPresenter . Ho deciso di fare le cose in modo diverso, per identificare un ContentPresenter con un’icona nella forma di un Path e il contenuto è impostato utilizzando i pulsanti sul lato.

Lo stile:

  

Esempio di utilizzo:

         

Output

inserisci la descrizione dell'immagine qui

È meglio che StackPanel determini le Resources e imposta il Button modo tale:

        

La domanda rimane con l’impostazione del valore per la TextBlock Duration , perché questo valore deve essere dinamico . L’ho implementato usando DependencyProperty . Impostalo sulla finestra, in questo modo:

  

Utilizzo in TextBlock :

  

In effetti, non c’è alcuna differenza per nessuno per determinare la DependencyProperty , perché è la caratteristica predominante.

Esempio di valore impostato:

 private void Button_Click(object sender, RoutedEventArgs e) { MyDependencyClass.SetCurrentDuration(MyWindow, "Duration: 101m"); } 

Un elenco completo di esempi:

XAML

             

Code behind

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { MyDependencyClass.SetCurrentDuration(MyWindow, "Duration: 101m"); } } public class MyDependencyClass : DependencyObject { public static readonly DependencyProperty CurrentDurationProperty; public static void SetCurrentDuration(DependencyObject DepObject, string value) { DepObject.SetValue(CurrentDurationProperty, value); } public static string GetCurrentDuration(DependencyObject DepObject) { return (string)DepObject.GetValue(CurrentDurationProperty); } static MyDependencyClass() { PropertyMetadata MyPropertyMetadata = new PropertyMetadata("Duration: 0m"); CurrentDurationProperty = DependencyProperty.RegisterAttached("CurrentDuration", typeof(string), typeof(MyDependencyClass), MyPropertyMetadata); } } 

Ecco il mio tentativo. Sembra più simile all’esempio dell’OP e fornisce proprietà impostabili per icona ( FrameworkElement ), titolo ( string ) e sottotitolo ( string ). L’output è simile a questo:

inserisci la descrizione dell'immagine qui

Ecco XAML:

  

Ecco il code-behind:

 using System.Windows; using System.Windows.Controls; namespace Controls { public partial class FancyButton : Button { public FancyButton() { InitializeComponent(); } public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(FancyButton), new FrameworkPropertyMetadata("Title", FrameworkPropertyMetadataOptions.AffectsRender)); public string SubTitle { get { return (string)GetValue(SubTitleProperty); } set { SetValue(SubTitleProperty, value); } } public static readonly DependencyProperty SubTitleProperty = DependencyProperty.Register("SubTitle", typeof(string), typeof(FancyButton), new FrameworkPropertyMetadata("SubTitle", FrameworkPropertyMetadataOptions.AffectsRender)); public FrameworkElement Image { get { return (FrameworkElement)GetValue(ImageProperty); } set { SetValue(ImageProperty, value); } } public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("Image", typeof(FrameworkElement), typeof(FancyButton), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender)); } } 

Ecco come usarlo:

                
       

In questo giorno ed età di computer e tablet con touchscreen, ecc., È spesso dimenticato di fornire input solo tramite tastiera. Un pulsante dovrebbe supportare un rettangolo di messa a fuoco (il rettangolo punteggiato quando il pulsante è attivo) o un’altra forma che corrisponde alla forma del pulsante.

Per aggiungere un rettangolo di messa a fuoco al pulsante, usa questo XAML (da questo sito ). Stile rettangolo di messa a fuoco:

  

Applicando lo stile al pulsante:

  

So che questa è una risposta abbastanza tarda, ma questa domanda apre un varco di scoperte alle grandi potenzialità e potenzialità del WPF, ho passato alcuni giorni a codificare questo controllo, e questo è il risultato (la mia versione):

inserisci la descrizione dell'immagine qui

Non parlerò molto di come è stato creato in quanto i controlli personalizzati in WPF hanno un solo modo di farlo ed è menzionato nelle risposte, ma ho caricato il progetto su GitHub, puoi sfogliarlo qui: https://github.com/mshwf / WPF-campioni / albero / master / Sample% 20Applications / CustomComboBox

si spera che Microsoft lo accetti nel suo repository WPF-Samples, come ho notato che manca agli esempi sulla creazione di controlli personalizzati!