1. 语法

1.1. XAML

2. 备注

当前版本的TreeGrid仅可以使用甘特图控件指定数据源格式。如需支持其他类型数据源,需要重新实现AbstractExpander和AbstractTreeGridLayout。

2.1. 定义Expander样式

通过自定义AbstractExpander的集成类,并设置TreeGrid.ExpanderProvider,可实现Expander的自定义,从而更换逻辑或样式。

自定义类的实现可参考默认提供的Expander类:SimpleTaskExpander

 

TreeGrid是扩展Silverlight自身提供的DataGrid实现的,关键是自定义了新的Column类型,此Column在每一行的单元格中添加了一个按钮控件,根据任务的层级缩进,并在用户单击时,发起一个“展开/折叠”事件,事件EventArgs中包含行所对应的任务Item数据。

代码如下:

namespace V2TEK.Silverlight.Charts.TreeGridHelper
   2: {
/// <summary>
/// 包含一个默认的Expander,继承自AbstractExpander。
/// 如有必要,可以通过继承AbstractExpander,复写Expander,并设置ExpanderProvider。
/// </summary>
class TreeGridExpanderColumn : DataGridTextColumn
   8:     {
public TreeGridExpanderColumn()
  10:         {
  11:         }
  12:  
private AbstractExpander CreateExpander()
  14:         {
as AbstractExpander;        
  16:         }
  17:  
public Type ExpanderProvider
  19:         {
  20:             get;
  21:             set;
  22:         }
  23:  
object dataItem)
  25:         {
  26:             StackPanel panel = GeneratePanel(dataItem);
base.GenerateEditingElement(cell, dataItem));
return panel;
  29:         }
  30:  
object dataItem)
  32:         {
  33:             StackPanel panel = GeneratePanel(dataItem);
base.GenerateElement(cell, dataItem));
return panel;
  36:         }
  37:  
object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs)
  39:         {
as TextBox;
null)
  42:             {
string.Empty;
  44:             }
string text = ee.Text;
int length = text.Length;
as KeyEventArgs;
null) && (args.Key == Key.F2))
  49:             {
  50:                 ee.Select(length, length);
return text;
  52:             }
  53:             ee.Select(0, length);
  54:  
base.PrepareCellForEdit(editingElement, editingEventArgs);
  56:         }
  57:  
public AbstractExpander GetExpander(DataGridRow row)
  59:         {
this.GetCellContent(row);
as AbstractExpander;
  62:             expander.Data = row.DataContext;
return expander;
  64:         }
  65:  
object dataItem)
  67:         {
new StackPanel();
  69:             panel.Orientation = Orientation.Horizontal;
  70:             panel.Children.Add(GenerateExpander(dataItem));
return panel;
  72:         }
  73:  
object dataItem)
  75:         {
  76:             AbstractExpander expander = CreateExpander();
  77:             expander.Data = dataItem;
new System.ComponentModel.PropertyChangedEventHandler(expander_PropertyChanged);
return expander;
  80:         }
  81:  
object sender, System.ComponentModel.PropertyChangedEventArgs e)
  83:         {
if (e.PropertyName == AbstractExpander.DATA_PROPERTY)
as AbstractExpander).Update();
  86:         }
  87:     }
  88: }

相关文章:

  • 2021-11-18
  • 2021-11-18
  • 2021-11-18
  • 2021-10-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
相关资源
相似解决方案