} // FindColumnHeader // ---------------------------------------------------------------------- private void InitColumns() { GridView view = listView.View as GridView; if (view == null) { return; } foreach (GridViewColumn gridViewColumn in view.Columns) { if (FixedColumn.IsFixedColumn(gridViewColumn)) { double?width = FixedColumn.GetFixedWidth(gridViewColumn); if (width.HasValue) { gridViewColumn.Width = width.Value; } } if (RangeColumn.IsRangeColumn(gridViewColumn)) { double?minWidth = RangeColumn.GetRangeMinWidth(gridViewColumn); double?maxWidth = RangeColumn.GetRangeMaxWidth(gridViewColumn); if (minWidth.HasValue || maxWidth.HasValue) { GridViewColumnHeader columnHeader = FindColumnHeader(listView, gridViewColumn); if (columnHeader != null) { double actualWidth = columnHeader.ActualWidth; if (minWidth.HasValue) { columnHeader.MinWidth = minWidth.Value; if (!double.IsInfinity(actualWidth) && actualWidth < columnHeader.MinWidth) { gridViewColumn.Width = columnHeader.MinWidth; } } if (maxWidth.HasValue) { columnHeader.MaxWidth = maxWidth.Value; if (!double.IsInfinity(actualWidth) && actualWidth > columnHeader.MaxWidth) { gridViewColumn.Width = columnHeader.MaxWidth; } } } } } } } // InitColumns
} // ThumbPreviewMouseMove // ---------------------------------------------------------------------- private void ThumbPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Thumb thumb = sender as Thumb; GridViewColumn gridViewColumn = FindParentColumn(thumb); // suppress column resizing for proportional, fixed and range fill columns if (ProportionalColumn.IsProportionalColumn(gridViewColumn) || FixedColumn.IsFixedColumn(gridViewColumn) || IsFillColumn(gridViewColumn)) { e.Handled = true; } } // ThumbPreviewMouseLeftButtonDown
} // Refresh // ---------------------------------------------------------------------- private void RegisterEvents(DependencyObject start) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(start); i++) { Visual childVisual = VisualTreeHelper.GetChild(start, i) as Visual; if (childVisual is Thumb) { GridViewColumn gridViewColumn = FindParentColumn(childVisual); if (gridViewColumn != null) { Thumb thumb = childVisual as Thumb; if (ProportionalColumn.IsProportionalColumn(gridViewColumn) || FixedColumn.IsFixedColumn(gridViewColumn) || IsFillColumn(gridViewColumn)) { thumb.IsHitTestVisible = false; } else { thumb.PreviewMouseMove += new MouseEventHandler(ThumbPreviewMouseMove); thumb.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(ThumbPreviewMouseLeftButtonDown); DependencyPropertyDescriptor.FromProperty( GridViewColumn.WidthProperty, typeof(GridViewColumn)).AddValueChanged(gridViewColumn, GridColumnWidthChanged); } } } else if (childVisual is GridViewColumnHeader) { GridViewColumnHeader columnHeader = childVisual as GridViewColumnHeader; columnHeader.SizeChanged += new SizeChangedEventHandler(GridColumnHeaderSizeChanged); } else if (scrollViewer == null && childVisual is ScrollViewer) { scrollViewer = childVisual as ScrollViewer; scrollViewer.ScrollChanged += new ScrollChangedEventHandler(ScrollViewerScrollChanged); // assume we do the regulation of the horizontal scrollbar scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; scrollViewer.VerticalScrollBarVisibility = verticalScrollBarVisibility; } RegisterEvents(childVisual); // recursive } } // RegisterEvents
} // RegisterEvents // ---------------------------------------------------------------------- private void UnregisterEvents(DependencyObject start) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(start); i++) { Visual childVisual = VisualTreeHelper.GetChild(start, i) as Visual; if (childVisual is Thumb) { GridViewColumn gridViewColumn = FindParentColumn(childVisual); if (gridViewColumn != null) { Thumb thumb = childVisual as Thumb; if (ProportionalColumn.IsProportionalColumn(gridViewColumn) || FixedColumn.IsFixedColumn(gridViewColumn) || IsFillColumn(gridViewColumn)) { thumb.IsHitTestVisible = true; } else { thumb.PreviewMouseMove -= new MouseEventHandler(ThumbPreviewMouseMove); thumb.PreviewMouseLeftButtonDown -= new MouseButtonEventHandler(ThumbPreviewMouseLeftButtonDown); DependencyPropertyDescriptor.FromProperty( GridViewColumn.WidthProperty, typeof(GridViewColumn)).RemoveValueChanged(gridViewColumn, GridColumnWidthChanged); } } } else if (childVisual is GridViewColumnHeader) { GridViewColumnHeader columnHeader = childVisual as GridViewColumnHeader; columnHeader.SizeChanged -= new SizeChangedEventHandler(GridColumnHeaderSizeChanged); } else if (scrollViewer == null && childVisual is ScrollViewer) { scrollViewer = childVisual as ScrollViewer; scrollViewer.ScrollChanged -= new ScrollChangedEventHandler(ScrollViewerScrollChanged); } UnregisterEvents(childVisual); // recursive } } // UnregisterEvents