Archiv

Artikel Tagged ‘WPF’

CurrentPrincipal in einer Unity-WPF-Anwendung setzen

10. Oktober 2014 Keine Kommentare

Bei der Untersuchung von Claims Authentifizierung mit WPF ​innerhalb einer mehrschichtigen Anwendung bin ich auf ein Problem gestoßen, den aktuellen (Windows-) Benutzer zu setzen.

Die Anwendung verwendet Unity und somit auch einen entsprechenden Bootstrapper, welcher von UnityBootstrapper erbt. Ich wollte also innerhalb von InializeShell im Bootstrapper auch den aktuellen Benutzer setzen bzw. Claims für den aktuellen Benutzer hinzufügen.

Laut mehreren Orten im Web kann dies ja per Thread.CurrentPrincipal erfolgen. Es ist allerdings so, dass scheinbar mehrere Threads erstellt werden und so der CurrentPrincipal nicht erhalten bleibt. Eine Lösung ist, den Benutzer für die aktuelle Domäne der Anwendung zu setzen – also mit AppDomain.CurrentDomain.SetThreadPrincipal(principal).

Ich hoffe das kann dem einen oder anderen helfen.

KategorienProgrammierung Tags: , , ,

Eigene Sortierung von DataGrids in WPF

28. Mai 2014 Keine Kommentare

Ich war auf der Suche nach einer Möglichkeit, für einzelne Spalten in einem WPF-DataGrid eine eigene Sortierung zu verwenden. Ausgehend von der schönen Lösung bei Stackoverflow habe ich eine weitere angehängte Eigenschaft implementiert, mit deren Hlfe man festlegen kann, welche Eigenschaft der einzelnen Elemente zur Sortierung verwendet wird.

Das Schöne an dieser Variante ist die einfache Verwendung. Es muss nur im DataGrid definiert werden, dass CustomSort erlaubt ist und bei einzelnen Spalten muss noch gesagt werden, welcher Comparer verwendet werden soll (In diesem Fall eine Implemetierung von ICustomSorter.

<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False" local:CustomSortBehaviour.AllowCustomSort="True"> <DataGrid.Resources> <local:MyComparer x:Key="myCustomComparer"/> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Header="MyHeader" local:CustomSortBehaviour.CustomSorter="{StaticResource myCustomComparer}" local:CustomSortBehaviour.CustomSortPropertyName="MySortingProperty" /> </DataGrid.Columns> </DataGrid>

Hier der Code für das Attached Behaviour:

public class CustomSortBehaviour { #region CustomSorter-Property public static readonly DependencyProperty CustomSorterProperty = DependencyProperty.RegisterAttached("CustomSorter", typeof(ICustomSorter), typeof(CustomSortBehaviour)); public static ICustomSorter GetCustomSorter(DataGridColumn gridColumn) { return (ICustomSorter)gridColumn.GetValue(CustomSorterProperty); } public static void SetCustomSorter(DataGridColumn gridColumn, ICustomSorter value) { gridColumn.SetValue(CustomSorterProperty, value); } #endregion #region AllowCustomSort-Property public static readonly DependencyProperty AllowCustomSortProperty = DependencyProperty.RegisterAttached("AllowCustomSort", typeof(bool), typeof(CustomSortBehaviour), new UIPropertyMetadata(false, OnAllowCustomSortChanged)); public static bool GetAllowCustomSort(DataGrid grid) { return (bool)grid.GetValue(AllowCustomSortProperty); } public static void SetAllowCustomSort(DataGrid grid, bool value) { grid.SetValue(AllowCustomSortProperty, value); } #endregion #region CustomSortPropertyName - Property public static readonly DependencyProperty CustomSortPropertyNameProperty = DependencyProperty.RegisterAttached("CustomSortPropertyName", typeof(string), typeof(CustomSortBehaviour)); public static string GetCustomSortPropertyName(DataGridColumn gridColumn) { return (string)gridColumn.GetValue(CustomSortPropertyNameProperty); } public static void SetCustomSortPropertyName(DataGridColumn gridColumn, string value) { gridColumn.SetValue(CustomSortPropertyNameProperty, value); } #endregion private static void OnAllowCustomSortChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var existing = d as DataGrid; if (existing == null) return; var oldAllow = (bool)e.OldValue; var newAllow = (bool)e.NewValue; if (!oldAllow && newAllow) { existing.Sorting += HandleCustomSorting; } else { existing.Sorting -= HandleCustomSorting; } } private static void HandleCustomSorting(object sender, DataGridSortingEventArgs e) { var dataGrid = sender as DataGrid; if (dataGrid == null || GetAllowCustomSort(dataGrid) == false) return; var listColView = dataGrid.ItemsSource as ListCollectionView; if (listColView == null) throw new Exception("The DataGrid's ItemsSource property must be of type ListCollectionView"); // Sanity check var sorter = GetCustomSorter(e.Column); if (sorter == null) return; var propertyName = GetCustomSortPropertyName(e.Column); // prevent the default sorter from working e.Handled = true; var direction = (e.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; e.Column.SortDirection = sorter.SortDirection = direction; // Set Property to use if (propertyName != null) { sorter.PropertyName = propertyName; } else { DataGridBoundColumn boundColumn = e.Column as DataGridBoundColumn; if (boundColumn != null) { Binding binding = (Binding)boundColumn.Binding; sorter.PropertyName = binding.Path.Path; } } listColView.CustomSort = sorter; } } public interface ICustomSorter : IComparer { ListSortDirection SortDirection { get; set; } string PropertyName { get; set; } }

KategorienProgrammierung Tags: ,

Fehler in der Fensterbehandlung von WPF

2. Oktober 2009 Keine Kommentare

Gerade habe ich einen kleinen Fehler in WPF entdeckt. Scheinbar ist es so, dass Fensterinstanzen bei der Instanziierung schon zur WindowCollection hinzugefügt werden und nicht erst wenn Sie geöffnet werden. Dadurch muss man Sie erst entfernen, bevor man das Programm beenden kann, da es ansonsten denkt, dass noch ein Fenster offen ist.

Mehr…

KategorienProgrammierung Tags: ,

Maskedtextbox in WPF implementieren

29. Juli 2009 1 Kommentar

Heute beschreibe ich mal, wie man in WPF ein Control erstellt, dass von TextBox erbt und die Funktionalität einer Maskedtextbox bietet. Als ich vor kurzem diese Funktionalität brauchte hat sich herausgestellt, dass das ganze innerhalb von kurzer Zeit erledigt werden kann.

Mehr…

dynamische Charts im WPF-Toolkit

13. Juli 2009 Keine Kommentare

Ich habe vor kurzem das WPF-Toolkit mit dem darin enthaltenen charting-Steuerelement entdeckt und muss sagen, dass es echt eine schöne Sache ist. Damit ist es wirklich sehr einfach einen Graphen zu erstellen.

Mehr…

VS2008 Projekte in Expression Blend öffnen und die Fehler

10. Oktober 2008 Keine Kommentare

Vor kurzem habe ich mein erstes WPF Projekt erstellt und wollte nun auch mal Expression Blend verwenden um das ganze ein bisschen aufzumotzen. Da kam beim öffnen direkt folgender Fehler:

Mehr…

Visual Studio 2008 Impressionen

12. März 2008 1 Kommentar

Endlich ist das Image für Visual Studio 2008 an meiner Uni verfügbar und ich habe natürlich direkt den Download begonnen. Nach einigen Stunden Deinstallation von Visual Studio 2005 (nach erheblichen Problemen bei der Upgrade-Installation von 2003 versuche ich das nicht nochmal…) konnte ich es endlich starten.

Der erste Eindruck: Alles ist wie vorher, nur etwas aufgeräumter. Mehr…