201 lines
6.5 KiB
C#
201 lines
6.5 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Windows;
|
|||
|
using System.Windows.Data;
|
|||
|
using System.Windows.Documents;
|
|||
|
using System.Windows.Input;
|
|||
|
using System.Windows.Media;
|
|||
|
using System.Windows.Media.Imaging;
|
|||
|
using System.Windows.Navigation;
|
|||
|
using System.Windows.Shapes;
|
|||
|
using System.Collections.ObjectModel;
|
|||
|
using System.Collections.Specialized;
|
|||
|
using EGC = ExtendedGrid.Microsoft.Windows.Controls;
|
|||
|
|
|||
|
namespace DataGridTransform
|
|||
|
{
|
|||
|
public class DataGridExtern : EGC.DataGrid
|
|||
|
{
|
|||
|
#region Constructor and Property
|
|||
|
|
|||
|
static DataGridExtern()
|
|||
|
{
|
|||
|
DefaultStyleKeyProperty.OverrideMetadata(typeof(DataGridExtern), new FrameworkPropertyMetadata(typeof(DataGridExtern)));
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateColumnWidth( DataGridDynamicColumn col,bool isExpanded )
|
|||
|
{
|
|||
|
if (this.Columns.Contains(col))
|
|||
|
{
|
|||
|
col.Width = 0;
|
|||
|
this.UpdateLayout();
|
|||
|
|
|||
|
if (isExpanded)
|
|||
|
col.Width = new EGC.DataGridLength(1, EGC.DataGridLengthUnitType.Auto);
|
|||
|
else
|
|||
|
col.Width = 34;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public System.Windows.Controls.ScrollViewer CurrentScrollViewer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
return this.InternalScrollHost;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Dynamic Columns Properies
|
|||
|
|
|||
|
public static readonly DependencyProperty DynamicColumnsProperty = DependencyProperty.Register("DynamicColumns",
|
|||
|
typeof(DataGridDynamicColumns), typeof(DataGridExtern), new FrameworkPropertyMetadata(OnNotifyDynamicColumnsChanged));
|
|||
|
|
|||
|
public DataGridDynamicColumns DynamicColumns
|
|||
|
{
|
|||
|
get { return (DataGridDynamicColumns)GetValue(DynamicColumnsProperty); }
|
|||
|
set { SetValue(DynamicColumnsProperty, value); }
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Dynamic Columns Functions
|
|||
|
|
|||
|
private static void OnNotifyDynamicColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|||
|
{
|
|||
|
((DataGridExtern)d).NotifyDynamicColumnsPropertyChanged(d, e);
|
|||
|
}
|
|||
|
|
|||
|
internal void NotifyDynamicColumnsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|||
|
{
|
|||
|
if (null == DynamicColumns)
|
|||
|
return;
|
|||
|
|
|||
|
DynamicColumns.DataGridParent = this;
|
|||
|
|
|||
|
ResetColumns();
|
|||
|
|
|||
|
AddDynamicColumns(DynamicColumns);
|
|||
|
}
|
|||
|
|
|||
|
public void OnDynamicColumnItemChanged(NotifyCollectionChangedEventArgs e)
|
|||
|
{
|
|||
|
if (e.Action == NotifyCollectionChangedAction.Add)
|
|||
|
{
|
|||
|
foreach (DataGridDynamicColumn item in e.NewItems)
|
|||
|
{
|
|||
|
item.parent = this;
|
|||
|
this.Columns.Add(item);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (e.Action == NotifyCollectionChangedAction.Remove)
|
|||
|
{
|
|||
|
foreach (DataGridDynamicColumn item in e.NewItems)
|
|||
|
{
|
|||
|
this.Columns.Remove(item);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (e.Action == NotifyCollectionChangedAction.Reset)
|
|||
|
{
|
|||
|
ResetColumns();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected void ResetColumns()
|
|||
|
{
|
|||
|
if (this.Columns.Count > 0)
|
|||
|
this.Columns.Clear();
|
|||
|
}
|
|||
|
|
|||
|
protected void AddDynamicColumns( DataGridDynamicColumns newColumns )
|
|||
|
{
|
|||
|
foreach (DataGridDynamicColumn col in newColumns)
|
|||
|
{
|
|||
|
col.parent = this;
|
|||
|
this.Columns.Add(col);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ScrollToEnd()
|
|||
|
{
|
|||
|
if (ref_scrollviewe != null)
|
|||
|
{
|
|||
|
ref_scrollviewe.ScrollToEnd();
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Horizontal Scroll Event Changed
|
|||
|
|
|||
|
public static readonly DependencyProperty UseHorizontalScrollingProperty = DependencyProperty.RegisterAttached("UseHorizontalScrolling", typeof(bool), typeof(DataGridExtern),
|
|||
|
new PropertyMetadata(default(bool), UseHorizontalScrollingChangedCallback));
|
|||
|
|
|||
|
public bool UseHorizontalScrolling
|
|||
|
{
|
|||
|
get { return (bool)GetValue(UseHorizontalScrollingProperty); }
|
|||
|
set { SetValue(UseHorizontalScrollingProperty, value); }
|
|||
|
}
|
|||
|
|
|||
|
public System.Windows.Controls.ScrollViewer ref_scrollviewe = null;
|
|||
|
private void _UseHorizontalScrollingChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
|||
|
{
|
|||
|
this.PreviewMouseWheel += delegate(object sender, MouseWheelEventArgs args)
|
|||
|
{
|
|||
|
System.Windows.Controls.ScrollViewer scrollViewer = GetTemplateChild("DG_ScrollViewer") as System.Windows.Controls.ScrollViewer;
|
|||
|
if (scrollViewer != null)
|
|||
|
{
|
|||
|
if (args.Delta > 0)
|
|||
|
scrollViewer.LineLeft();
|
|||
|
else
|
|||
|
scrollViewer.LineRight();
|
|||
|
}
|
|||
|
ref_scrollviewe = scrollViewer;
|
|||
|
args.Handled = true;
|
|||
|
};
|
|||
|
}
|
|||
|
private static void UseHorizontalScrollingChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
|||
|
{
|
|||
|
DataGridExtern datagrid = dependencyObject as DataGridExtern;
|
|||
|
|
|||
|
if (datagrid == null)
|
|||
|
throw new ArgumentException("Element is not an ItemsControl");
|
|||
|
|
|||
|
datagrid._UseHorizontalScrollingChangedCallback(dependencyObject, dependencyPropertyChangedEventArgs);
|
|||
|
}
|
|||
|
|
|||
|
public static void SetUseHorizontalScrolling(System.Windows.Controls.ItemsControl element, bool value)
|
|||
|
{
|
|||
|
element.SetValue(UseHorizontalScrollingProperty, value);
|
|||
|
}
|
|||
|
|
|||
|
public static bool GetUseHorizontalScrolling(System.Windows.Controls.ItemsControl element)
|
|||
|
{
|
|||
|
return (bool)element.GetValue(UseHorizontalScrollingProperty);
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
protected override void OnKeyDown(KeyEventArgs e)
|
|||
|
{
|
|||
|
switch (e.Key)
|
|||
|
{
|
|||
|
case Key.Tab:
|
|||
|
case Key.Left:
|
|||
|
case Key.Right:
|
|||
|
case Key.Up:
|
|||
|
case Key.Down:
|
|||
|
case Key.Home:
|
|||
|
case Key.End:
|
|||
|
case Key.PageUp:
|
|||
|
case Key.PageDown:
|
|||
|
base.OnKeyDown(e);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|