Пример #1
0
 private ExtendedGridViewColumn CreateGridViewColumn(String header, String displayMemberBinding)
 {
     ExtendedGridViewColumn gvc = new ExtendedGridViewColumn();
     gvc.Header = header;
     gvc.DisplayMemberBinding = new Binding(displayMemberBinding);
     gvc.SortPropertyName = displayMemberBinding;
     return gvc;
 }
Пример #2
0
        private ExtendedGridViewColumn CreateGridViewColumn(String header, String displayMemberBinding)
        {
            ExtendedGridViewColumn gvc = new ExtendedGridViewColumn();

            gvc.Header = header;
            gvc.DisplayMemberBinding = new Binding(displayMemberBinding);
            gvc.SortPropertyName     = displayMemberBinding;
            return(gvc);
        }
Пример #3
0
 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;
     }
 }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        /// <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;
        }
Пример #6
0
        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;
        }
Пример #7
0
        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;
                }
            }
        }
Пример #8
0
        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);
                }
            }
        }
Пример #9
0
 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;
     }
 }
Пример #10
0
        /// <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;
        }