Comme je lance dans des parties de WPF que je préfère programmer dans un style fluide, j'ajouter le soutien des méthodes d'extension à un ensemble d'utilité personnelle. Par exemple, voici un programme qui montre les propriétés TaskbarItemInfo
ProgressValue
et ProgressState
. Cette version est écrite d'une manière standard non-fluide.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shell;
namespace TaskbarItemProgress
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TaskbarItemInfo = new TaskbarItemInfo();
TaskbarItemInfo.ProgressValue = 0.5;
var stackPanel = new StackPanel();
Content = stackPanel;
var normalButton = new Button() { Content = "Normal" };
normalButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
stackPanel.Children.Add(normalButton);
var pausedButton = new Button() { Content = "Paused" };
pausedButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Paused;
stackPanel.Children.Add(pausedButton);
var errorButton = new Button() { Content = "Error" };
errorButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Error;
stackPanel.Children.Add(errorButton);
var indeterminateButton = new Button() { Content = "Indeterminate" };
indeterminateButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Indeterminate;
stackPanel.Children.Add(indeterminateButton);
var noneButton = new Button() { Content = "None" };
noneButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None;
stackPanel.Children.Add(noneButton);
var increaseButton = new Button() { Content = "Increase" };
increaseButton.Click += (s, e) => TaskbarItemInfo.ProgressValue += 0.10;
stackPanel.Children.Add(increaseButton);
var decreaseButton = new Button() { Content = "Decrease" };
decreaseButton.Click += (s, e) => TaskbarItemInfo.ProgressValue -= 0.10;
stackPanel.Children.Add(decreaseButton);
}
}
}
est ici la version couramment:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shell;
using FluentWpf;
namespace TaskbarItemProgress
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TaskbarItemInfo = new TaskbarItemInfo();
TaskbarItemInfo.ProgressValue = 0.5;
Content = new StackPanel()
.AddChildren(
new Button() { Content = "Normal" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal),
new Button() { Content = "Paused" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Paused),
new Button() { Content = "Error" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Error),
new Button() { Content = "Indeterminate" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Indeterminate),
new Button() { Content = "None" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None),
new Button() { Content = "Increase" } .AddClick((s, e) => TaskbarItemInfo.ProgressValue += 0.10),
new Button() { Content = "Decrease" } .AddClick((s, e) => TaskbarItemInfo.ProgressValue -= 0.10));
}
}
}
La version couramment emploie deux méthodes d'extension, AddChildren
(au lieu de Children.Add
) et AddClick
(au lieu de Click += ...
).
Le programme ressemble à ceci:
Je garde mon personnel FluentWpf
library on github.
Merci. J'ai écouté ces deux podcasts, et j'ai en fait décidé d'étudier la technologie silverlight grâce à eux. WPF contient beaucoup de choses intéressantes - c'est juste une question de savoir comment les utiliser (et les emballer). Au risque de me fréquenter, j'avais pensé à un MFC équivalent à WPF, mais l'interface fluide semble être une meilleure approche. Est-ce que quelqu'un d'autre connaît d'autres évaluations équilibrées de WPF? C'est à dire. ni totalement négatif ni complètement aveugle? – kmontgom
Je n'ai pas entendu parler de beaucoup. La plupart des gens adoptent Xaml que j'ai croisé. C'est vraiment mauvais du tout. Je l'aime beaucoup maintenant, personnellement. Je pense que si je devais aller à une interface fluide je le trouverais probablement encombrant, si vous pouvez le croire. –
J'aime travailler avec XAML, mais j'aimerais avoir l'idée d'un typage fort et d'autres types de vérification de type de compilation que Fluent Interface ou toute autre méthode basée sur le code pourrait offrir. La partie des mots traitant de liaison de données XAML est que vous vous sentez comme votre retour sur le Web en faisant le code d'essai et d'erreur et exécutez l'application pour voir si cela fonctionne type de programmation. Je préférerais laisser cela aux testeurs mais, pire encore, les testeurs ne voient même pas d'erreur de liaison par défaut, nous devons donc introduire notre propre gestion des erreurs WPF pour obtenir les commentaires des testeurs. Bummer. – jpierson