2013-05-20 55 views
3

FindControl似乎只引用网格的名称,而不是网格内的列名称。我找不到任何有关FindControlInCollection的文档或示例。Lightswitch - 隐藏列

在这一点上,我没有任何复杂的逻辑来包装它。只需要隐藏列。我使用C#和VS更新2

回答

2

在屏幕激活时,使用此代码块:

  1. 使用网格的名称获取一个IControlItemProxy
  2. 获取控件本身。
  3. 按索引访问列并动态设置其可见性。
  4. using指令添加到System.Windows.Controls

partial void ScreenName_Activated() 
{ 
    IContentItemProxy proxy = this.FindControl("NameOfGrid"); 

    proxy.ControlAvailable += new EventHandler<ControlAvailableEventArgs>((s1, e1) => 
     { 
      DataGrid dataGrid = (DataGrid)e1.Control; 

      dataGrid.Columns[0].Visibility = System.Windows.Visibility.Collapsed; 
      dataGrid.Columns[1].Visibility = System.Windows.Visibility.Collapsed; 
     }); 
} 
2

布赖恩的答案包含你所需要的。

FindControl只得到代理的控件。虽然有几件事情可以使用它来设置,但控制的唯一方法是通过代理的ControlAvailable处理程序访问它,该处理程序提供对其参数ControlAvailableEventArgs中的基础控件的引用。

此外,你可以看到,你实际上并没有通过了在电网中使用的控件集列的可见性,您可以设置使用它的DataGrid中集合,而不是直接。

+0

+1谢谢Yann进一步阐述 –

+0

没问题。我在这里尽我所能提供帮助。 :-) –