private ExtendedGridViewColumn CreateGridViewColumn(String header, String displayMemberBinding) { ExtendedGridViewColumn gvc = new ExtendedGridViewColumn(); gvc.Header = header; gvc.DisplayMemberBinding = new Binding(displayMemberBinding); gvc.SortPropertyName = displayMemberBinding; return gvc; }
private ExtendedGridViewColumn CreateGridViewColumn(String header, String displayMemberBinding) { ExtendedGridViewColumn gvc = new ExtendedGridViewColumn(); gvc.Header = header; gvc.DisplayMemberBinding = new Binding(displayMemberBinding); gvc.SortPropertyName = displayMemberBinding; return(gvc); }
private void SetColumnHeaderTemplate(ExtendedGridViewColumn column, ListSortDirection?direction) { if (direction == null) { column.HeaderTemplate = TryFindResource(ColumnHeaderNotSortedTemplate) as DataTemplate; } else if (direction == ListSortDirection.Ascending) { column.HeaderTemplate = TryFindResource(ColumnHeaderSortedAscendingTemplate) as DataTemplate; } else { column.HeaderTemplate = TryFindResource(ColumnHeaderSortedDescendingTemplate) as DataTemplate; } }
public void Initialise() { // cast the ListView's View to a GridView GridView gridView = this.View as GridView; if (gridView == null) { return; } // determine which column is marked as IsDefaultSortColumn ExtendedGridViewColumn defaultGridViewColumn = null; foreach (GridViewColumn gridViewColumn in gridView.Columns) { ExtendedGridViewColumn sortableGridViewColumn = gridViewColumn as ExtendedGridViewColumn; if (sortableGridViewColumn != null && sortableGridViewColumn.IsDefaultSortColumn) { defaultGridViewColumn = sortableGridViewColumn; break; } } // if the default sort column is defined, sort the data and then update the templates as necessary. if (defaultGridViewColumn != null) { lastSortedOnColumn = defaultGridViewColumn; Sort(defaultGridViewColumn.SortPropertyName, ListSortDirection.Ascending); SetColumnHeaderTemplate(defaultGridViewColumn, ListSortDirection.Ascending); SelectedIndex = 0; } // Set the "not sorted" template to all the other columns. This is so column header are correctly auto-sized. foreach (GridViewColumn gridViewColumn in gridView.Columns) { ExtendedGridViewColumn sortableGridViewColumn = gridViewColumn as ExtendedGridViewColumn; if (sortableGridViewColumn != null && sortableGridViewColumn != defaultGridViewColumn) { SetColumnHeaderTemplate(sortableGridViewColumn, null); } } }
/// <summary> /// Event Handler for the ColumnHeader Click Event. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e) { GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader; // ensure that we clicked on the column header and not the padding that's added to fill the space. if (headerClicked == null || headerClicked.Role == GridViewColumnHeaderRole.Padding) { return; } // attempt to cast to the ExtendedGridViewColumn object. ExtendedGridViewColumn sortableGridViewColumn = headerClicked.Column as ExtendedGridViewColumn; // ensure that the column header is the correct type and a sort property has been set. if (sortableGridViewColumn == null || String.IsNullOrEmpty(sortableGridViewColumn.SortPropertyName)) { return; } ListSortDirection direction = ListSortDirection.Ascending; bool newSortColumn = false; // determine whether this is a new sort, or a switch in sort direction. if (lastSortedOnColumn == null || String.IsNullOrEmpty(lastSortedOnColumn.SortPropertyName) || !String.Equals(sortableGridViewColumn.SortPropertyName, lastSortedOnColumn.SortPropertyName, StringComparison.InvariantCultureIgnoreCase)) { newSortColumn = true; } else if (lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } Sort(sortableGridViewColumn.SortPropertyName, direction); SetColumnHeaderTemplate(sortableGridViewColumn, direction); // Remove arrow from previously sorted header if (newSortColumn && lastSortedOnColumn != null) { SetColumnHeaderTemplate(lastSortedOnColumn, null); } lastSortedOnColumn = sortableGridViewColumn; }
private void SetPlayerListGridView(Demo demo) { GridView gv = new GridView(); ExtendedGridViewColumn nameColumn = CreateGridViewColumn("Name", "Name"); nameColumn.IsDefaultSortColumn = true; nameColumn.IsLowPriority = true; gv.Columns.Add(nameColumn); if (demo.Engine != Demo.Engines.Source) { gv.Columns.Add(CreateGridViewColumn("cl__updaterate", "UpdateRate")); gv.Columns.Add(CreateGridViewColumn("rate", "Rate")); } if (demo.Engine == Demo.Engines.Source || demo.NetworkProtocol >= 48) { gv.Columns.Add(CreateGridViewColumn("Steam ID", "SteamId")); } uiPlayersListView.View = gv; }
private void ResizeColumnsWorker() { if (Thread.CurrentThread != Dispatcher.Thread) { Thread.Sleep(resizeColumnsWaitTime); Dispatcher.Invoke(DispatcherPriority.Normal, new Procedure(ResizeColumnsWorker)); return; } GridView view = View as GridView; if (view == null) { return; } // autosize all columns foreach (GridViewColumn column in view.Columns) { column.Width = column.ActualWidth; } UpdateLayout(); foreach (GridViewColumn column in view.Columns) { column.Width = Double.NaN; } UpdateLayout(); // count column widths that aren't low priority or fill columns Double controlWidth = (scrollViewer == null ? ActualWidth : scrollViewer.ViewportWidth); Double normalColumnWidthTotal = 0; ExtendedGridViewColumn lowPriorityColumn = null; ExtendedGridViewColumn fillColumn = null; foreach (ExtendedGridViewColumn column in view.Columns) { if (column.IsLowPriority) { lowPriorityColumn = column; } else if (column.IsFillColumn) { fillColumn = column; } else { normalColumnWidthTotal += column.ActualWidth; } } // size the low priority column if (lowPriorityColumn != null) { Double desiredWidth = controlWidth - (normalColumnWidthTotal + (fillColumn == null ? 0 : fillColumn.ActualWidth)) - 4; // padding if (desiredWidth > 0 && desiredWidth < lowPriorityColumn.ActualWidth) { lowPriorityColumn.Width = desiredWidth; } } // size the fill column if (fillColumn != null) { Double desiredWidth = controlWidth - (normalColumnWidthTotal + (lowPriorityColumn == null ? 0 : lowPriorityColumn.ActualWidth)) - 4; // padding if (desiredWidth > 0 && desiredWidth > fillColumn.ActualWidth) { fillColumn.Width = desiredWidth; } } }
public void Initialise() { // cast the ListView's View to a GridView GridView gridView = this.View as GridView; if (gridView == null) { return; } // determine which column is marked as IsDefaultSortColumn ExtendedGridViewColumn defaultGridViewColumn = null; foreach (GridViewColumn gridViewColumn in gridView.Columns) { ExtendedGridViewColumn sortableGridViewColumn = gridViewColumn as ExtendedGridViewColumn; if (sortableGridViewColumn != null && sortableGridViewColumn.IsDefaultSortColumn) { defaultGridViewColumn = sortableGridViewColumn; break; } } // if the default sort column is defined, sort the data and then update the templates as necessary. if (defaultGridViewColumn != null) { lastSortedOnColumn = defaultGridViewColumn; Sort(defaultGridViewColumn.SortPropertyName, ListSortDirection.Ascending); SetColumnHeaderTemplate(defaultGridViewColumn, ListSortDirection.Ascending); SelectedIndex = 0; } // Set the "not sorted" template to all the other columns. This is so column header are correctly auto-sized. foreach (GridViewColumn gridViewColumn in gridView.Columns) { ExtendedGridViewColumn sortableGridViewColumn = gridViewColumn as ExtendedGridViewColumn; if (sortableGridViewColumn != null && sortableGridViewColumn != defaultGridViewColumn) { SetColumnHeaderTemplate(sortableGridViewColumn, null); } } }
private void SetColumnHeaderTemplate(ExtendedGridViewColumn column, ListSortDirection? direction) { if (direction == null) { column.HeaderTemplate = TryFindResource(ColumnHeaderNotSortedTemplate) as DataTemplate; } else if (direction == ListSortDirection.Ascending) { column.HeaderTemplate = TryFindResource(ColumnHeaderSortedAscendingTemplate) as DataTemplate; } else { column.HeaderTemplate = TryFindResource(ColumnHeaderSortedDescendingTemplate) as DataTemplate; } }
/// <summary> /// Event Handler for the ColumnHeader Click Event. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e) { GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader; // ensure that we clicked on the column header and not the padding that's added to fill the space. if (headerClicked == null || headerClicked.Role == GridViewColumnHeaderRole.Padding) { return; } // attempt to cast to the ExtendedGridViewColumn object. ExtendedGridViewColumn sortableGridViewColumn = headerClicked.Column as ExtendedGridViewColumn; // ensure that the column header is the correct type and a sort property has been set. if (sortableGridViewColumn == null || String.IsNullOrEmpty(sortableGridViewColumn.SortPropertyName)) { return; } ListSortDirection direction = ListSortDirection.Ascending; bool newSortColumn = false; // determine whether this is a new sort, or a switch in sort direction. if (lastSortedOnColumn == null || String.IsNullOrEmpty(lastSortedOnColumn.SortPropertyName) || !String.Equals(sortableGridViewColumn.SortPropertyName, lastSortedOnColumn.SortPropertyName, StringComparison.InvariantCultureIgnoreCase)) { newSortColumn = true; } else if (lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } Sort(sortableGridViewColumn.SortPropertyName, direction); SetColumnHeaderTemplate(sortableGridViewColumn, direction); // Remove arrow from previously sorted header if (newSortColumn && lastSortedOnColumn != null) { SetColumnHeaderTemplate(lastSortedOnColumn, null); } lastSortedOnColumn = sortableGridViewColumn; }