VirtualizingWrapPanel

WPF besitzt mit dem VirtualizingStackPanel und dem DataGridCellsPanel zwei Subklassen, die von der abstrakten Klasse VirtualizingPanel abgeleitet sind. Das VirtualizingStackPanel wird in der Regel innerhalb von anderen Steuerelementen wie z.B. der ListBox oder einem ListView zum Anordnen und damit zur Anzeige der ListItems verwendet. Warum wird dort kein normales Stackpanel verwendet? Die Antwort ist relativ einfach: Aus Performancegründen. Stellen Sie sich eine ListView mit einigen tausend Einträgen vor. Bei einem VirtualizingStackPanel werden nur die Einträge erstellt, die im aktuell sichtbaren Bereich des ListViews liegen. Erst wenn der Anwender mit dem Scrollen beginnt werden die anderen Einträge erstellt. Bei einem normalen StackPanel würden zunächst alle Items (also auch die zunächst nicht sichtbaren) erstellt. Das führt in der Regel zu deutlichen Performanceproblemen. Unter Umständen kann der Bildschirm mehrere Minuten einfrieren bevor alle Elemente gerendert sind. (Das DataGridCellsPanel arbeitet analog wie das VirtualizingStackPanel. Allerdings kommt es lediglich intern im DataGrid zum Einsatz.)

In einem Kundenprojekt habe ich nun analog ein VirtualizingWrapPanel benötigt, da ich eine größere Anzahl von Items innerhalb eines ListViews in Form eines WrapPanels darstellen wollte. Leider stellt einem das .Net Framework dafür out of the box keine entsprechende Klasse zur Verfügung. Abhilfe verspricht hier das folgende Projekt: http://www.codeproject.com/Articles/75847/Virtualizing-WrapPanel. Das Projekt liefert ein solches frei verfügbares VirtualizingWrapPanel inklusive SourceCode. Leider haben meine Tests gezeigt, dass dieses Panel zumindest für meine Ansprüche nicht performant genug ist. Beim Vergrößern eines Fensters ruckelte es doch ziemlich stark, wenn die Einträge neu umgebrochen werden müssen. Beim Scrollen gibt es teilweise den gleichen Effekt. Außerdem funktionierte es in meinem Anwendungsfall nicht ohne Probleme. Ab und an kam es leider zu Abstürzen bzw. unbehandelten Exceptions.

Die einzige vernünftige Lösung bietet aktuell meines Wissens nach die Firma Binarymission (http://binarymission.co.uk/binaryvirtualizingwrappanelwpf.htm). Deren VirtualizingWrapPanel funktionierte in meinem Anwendungsfall ohne Probleme. Das Produkt ist aber leider kostenpflichtig!

Falls jemand eine bessere Lösung weiß, wäre ich für einen entsprechenden Hinweis sehr dankbar!

WPF Binding Converter

Das .Net-Framework kommt OFTB bereits mit einigen Konvertern daher: AlternationConverter, BooleanToVisibilityConverter, BorderGapMaskConverter, DataGridLengthConverter, MenuScrollingVisibilityConverter, ZoomPercentageConverter, JournalEntryListConverter, ProgressBarBrushConverter, ProgressBarHighlightConverter, JournalEntryUnifiedViewConverter (weitere Infos unter: http://asimsajjad.blogspot.de/2010/05/built-in-wpf-ivalueconverters.html)

Ein Konverter, den ich schon häufiger vermisst habe,  ist der BoolToOppositeBoolConverter-Converter, der einfach “True” in “False” konvertiert und umgekehrt: http://www.codeproject.com/Articles/24330/WPF-Bind-to-Opposite-Boolean-Value-Using-a-Convert

Weitere Konverter findet man hier: http://wpfconverters.codeplex.com/

Word Start Performance Problem

Word2007

Beim Starten von Microsoft Word kann es unter bestimmten Umständen Performance-Probleme geben. Oft liegt es daran,  dass AddIns installiert sind, die direkt beim Start ausgeführt werden. Unter dem folgenden Link liefert Microsoft wertvolle Tipps woran es genau liegen könnte und wie man das Problem in den Griff bekommen kann:

http://blogs.msdn.com/b/vsod/archive/2012/05/19/resolving-performance-issues-with-loading-office-add-ins-vsto-add-ins-or-shared-add-ins.aspx

Bei einem Kunden waren die PIA, dh. die Microsoft Interop Assemblies (siehe Punkt 2 im o.g. Link), das Problem. Die PIA ermöglichen es verwaltetem Code mit dem COM-basierten Objektmodell einer Microsoft Office-Anwendung zu interagieren und werden daher normalerweise von AddIns benötigt. Die PIA sind mit einem Zertifikat versehen. Word 2007 überprüft beim Start, ob das entsprechende Zertifikat in der Zwischenzeit zurückgezogen wurde und will daher eine Internetverbindung aufbauen. Da die betroffenen Anwender jedoch keine Berechtigungen zum Aufbau einer Internetverbindung hatten, lief dieser Punkt ins Leere. Der Start von Word dauerte tatsächlich ca. 2 Minuten. Dieses Problem ließ sich durch das Hinzufügen der folgenden Config-Datei ins Winword.exe-Verzeichnis lösen:

<configuration>
 <runtime>
 <generatePublisherEvidence enabled="false"/>
 </runtime>
</configuration>

Weitere Infos siehe auch: http://msdn.microsoft.com/en-us/library/bb629393(v=vs.100).aspx

VSTO AddIn – Installation

microsoft-office

Wie man ein VSTO Addin für alle Benutzer installiert wird hier im Detail beschrieben:

http://blogs.msdn.com/b/mshneer/archive/2007/09/04/deploying-your-vsto-add-in-to-all-users-part-i.aspx

http://blogs.msdn.com/mshneer/archive/2007/09/05/deploying-your-vsto-add-in-to-all-users-part-ii.aspx

FileSystemWatcher

Ein FileSystemWatcher in .Net kann unter Umständen auch mal seine Arbeit verweigern. Das kann sich zum Beispiel so auswirken, das die Software nicht mehr auf das Created-Ereignis reagiert. Wie in einem solchen Fall zu verfahren ist steht z.B. hier: http://stackoverflow.com/questions/6184115/filesystemwatcher-stops-catching-events

Windows-Remoteunterstützung

Remote

Unter Windows 7 + 8 gibt es das Feature “Windows-Remoteunterstützung”. Damit kann man auf einfache Art und Weise ohne Zusatzsoftware einer anderen Person Zugriff auf den eigenen Desktop gewähren um Support zu erhalten. Funktion findet man einfach in dem man im Startmenü im Suchen-Textfeld das Wort “Remote” eingibt. Dann auf “Eine vertrauenswürdige Person zur Unterstützung einladen” klicken. Alles weitere ist praktisch selbsterklärend. Weitere Infos unter: http://windows.microsoft.com/de-DE/windows-8/windows-remote-assistance-frequently-asked-questions

TFS 2010 WebAccess Problem

TFSWA

Achtung:

Im TFS werden bei Verwendung von Team Web Access mit dem Internet Explorer Informationen, die man bei einem WorkItem in Details einträgt, nicht gespeichert, wenn man im IE  die Option “Tastaturnavigation für neue Fenster und Registerkarten aktivieren” unter Barrierefreiheit in den Internetoptionen (Erweitert) aktiviert hat.

Einführung in MVVM

Die beste Einführung in MVVM, die ich gefunden habe, ist diese: http://visualstudiogallery.msdn.microsoft.com/af12ce3b-8337-4bbb-853f-9fdad7105ec8

Ein weiteres Skript findet sich hier: http://msdn.microsoft.com/de-de/magazine/dd419663.aspx

Besonderheiten im Zusammenhang mit einem TreeView zeigt dieser Artikel auf.

WPF Search TextBox

SearchTextBox

Leider gibt es im .Net Framework out of the Box keine sogenannte SearchTextBox wie sie z.B. von den Office-Anwendungen bekannt ist. Abhilfe schafft hier ein Steuerelement von David Owens: http://davidowens.wordpress.com/2009/02/18/wpf-search-text-box/.

Die SearchTextBox kann in zwei verschiedenen Modi betrieben werden. Im 1. Modus wird die Suche sofort beim Eintippen eines Suchbegriffs durchgeführt. Im 2. Fall muss man erst die Suchschaltfläche betätigen.

WPF Borderless Window

Wenn man mit Hilfe von WPF Applikationen mit einem modernen Design bauen will, hat man mit den in WPF angebotenen Styles so seine Probleme. Wenn man z.B. eine Applikation mit Office 2013 Style bauen will, benötigt man in WPF ein sogenanntes “Borderless Window”, also ein Fenster ohne den unschönen dicken Rahmen. Hier leistet die frei verfügbare MahApps-Bibliothek gesponsert von der Firma AIT gute Dienste: http://mahapps.com/MahApps.Metro/.

BorderlessWindow

Neben den Styles bietet die Bibliothek auch einige sehr interessante neue Steuerelemente wie z.B. “Panorama”. Panorama ist eine seitwärts scrollende Liste, wie sie z.B. vom Windows 8 Startbildschirm bekannt ist:

Panorama