Ich möchte nur ein paar Tipps, wenn ich eine ansprechende Benutzeroberfläche erstellen möchte.
Ich weiß, wie man es benutzt:
%Vor%Ich bin auf der Suche nach weiteren Tipps, wie verbindlichen Tipps ... Wenn ich über 50 Steuerelemente auf meiner Benutzeroberfläche habe, die aktualisiert werden müssen.
%Vor%Bei der Verarbeitung von Daten im Hintergrund ... Best Practices, wenn es um langwierige Prozesse geht.
Was kann ich noch tun, damit meine Benutzeroberfläche zu 100% reagiert?
Bearbeiten PresentationSource
Verwenden Sie PLinq oder Linq für mehrere Threads mit
AsQueryable () zum dynamischen Filtern von Datenquellen als single-threaded und thread-unabhängig CollectionView
.
Readymade Gifs über Animation
Vitalisierung von nicht virtualisierten Panels wie Canvas
Deferred scrolling
Trigger.Exnter \ Exit Aktionen für Animationen.
BeginStoryboard.HandoffBehavior="Verfassen"
Verwenden von Hardware über Software-Beschleunigung.
Vermeidung von WindowStyle=None
, AllowTransparency=true
, Background=Transparent
, TileMode
Konfigurieren Sie RenderOptions.BitmpaScalingMode
als LowQuality und aktivieren Sie das Caching. Aktivieren Sie PresentationFontCache
Windows-Dienst.
Verwenden Sie Staticresources
über Dynamicresources
Vermeiden Sie vererbbare Abhängigkeitseigenschaften. Vermeiden Sie auch schwere Operationen in Callbacks mit geänderten Eigenschaften.
Verwenden Sie Freezable-Pinsel. Vermeiden Sie x:Name
/ Namescoping
/ Binding
zu ihren Color
propertys, damit sie die ganze Zeit freezable sein können.
Legen Sie den Hintergrund des Rahmens fest, wenn er den Hintergrund eines visuellen Hintergrunds einkapselt. Ähnliches gilt, wenn Sie Brush
als Hintergrund eines visuellen Objekts festgelegt haben und dann Brush.Opacity
als Visual.Opacity
angeben.
Wertkonverter müssen einen minimalistischen Code haben. Benutze Binding.IsAsync
und PriorityBinding
wo immer anwendbar.
Verwenden Sie standardmäßig Expanders
mit IsExpanded=False
.
CompositionTarget.Rendering
wird bei jedem Rendering-Zyklus ausgelöst und sollte nur bei Bedarf verwendet werden. Trennen Sie es bei jeder Gelegenheit.
WPF DataGrid
sollte die häufige Verwendung von Combobox-Spalten und editierbaren Template-Spalten vermeiden, da die combobx-Vorlagen versuchen, den ausgewählten Wert zu laden und den Anzeigepfad zu verwenden, indem sie von der Elementquelle von gesucht werden Combobox- und Vorlagenspalten sind undicht, wenn sie mit stark beobachtbaren Sammlungen verwendet werden.
Verwenden Sie WPF Extedned Tooklit-basierte Shader-Effekte und neue Pixel Shader-APIs wie Unschärfe, Schatten.
Und viele mehr ...
Ich fand Lazy-Loading immer sehr hilfreich, um zu verhindern, dass große Datenmengen gleichzeitig geladen werden. Hier wird die meiste Zeit für die Inbetriebnahme benötigt, wenn große Datenmengen verarbeitet werden. Binden Sie Ihre Datensätze an virtualisierte Objektsteuerelemente, um den Arbeitsspeicher zu minimieren Fußabdruck (offensichtlich ist WPF Ihr Maßstab dafür, was im Gedächtnis notwendig ist).
Aber um ehrlich zu sein: Martin hat ganz recht ... 50+ datengesteuerte Steuerelemente, ... Mann, das ist verdammt höllisch; -)
Und Ihre Suche nach 100% Reaktionsfähigkeit, denke ich, bedarf einer weiteren Erklärung. Nach meinem Verständnis können Anwendungen reaktionsfähig sein oder nicht (Benutzereingaben nehmen / Ausgaben produzieren, statt nichts zu tun). Zielen Sie auf die beste Leistung? Oder ist es ein Rorlock-Szenario, dem Sie gegenüberstehen? Lassen Sie den Benutzer andere Datensätze bearbeiten, während Sie lange Aufgaben an bestimmten Datensätzen ausführen.
Ich denke einiges von dem, was AngelWPF erwähnt hat, findet sich in diesem Artikel zur Prioritätsbindung.
50+ Steuerelemente auf einer einzelnen Benutzeroberfläche klingen so, als ob sie von einem Coder entworfen worden wären, und die Optimierung des Codes würde das eigentliche Problem wahrscheinlich nur für eine Weile ausgleichen. Das Beste daran ist, die Funktionalität auf verschiedenen Bildschirmen zu trennen oder die weniger verwendeten Informationen hinter den Menüs zu verstecken.