2011-05-23 50 views
7

假设我在DataGridTemplateColumn中有一个任意控件,我希望知道如何获取控件,因为我已经检索到包含该控件的DataGridCell。从DataGridCell获取控件

含有数据网格我XAML文件如下:

<DataGrid Name="dgMovement"> 
...  
    <DataGridTemplateColumn Header="Target %"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
      <vi:PercentageEditor Value="{Binding TargetPercentage, Mode=TwoWay, 
         UpdateSourceTrigger=PropertyChanged}" Width="100px" 
         cal:Message.Attach="[Event PreviewLostKeyboardFocus] = [Action ChangeTargetPercentage];[Event PreviewGotKeyboardFocus] = [Action OnFocus]" 
         Name="aa" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn>... 

我检索到的DataGridCell使用扩展方法如下:

DataGridCell cell = view.dgMovement2.GetCell(index, 6); 

的扩展方法,包含在一个静态类是发现here

问题是,如何检索“PercentageEditor”,一旦我获得了DataGridCell?有谁能够帮助我?任何帮助将不胜感激。谢谢!

回答

11

您可以使用控件的名称在模板中找到它,例如

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <uc:Bogus x:Name="root" ItemsSource="{Binding Machines}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
var cell = dataGrid.GetCell(5, 0); 
var cp = (ContentPresenter)cell.Content; 
var bogus = (Bogus)cp.ContentTemplate.FindName("root", cp); 

不过请注意,这通常应该必要,因为修改模板控制在大多数情况下可以使用数据绑定单独,附加属性和事件来完成。一般来说,我会通过代码限制模板访问到自定义控件(通常有designated parts)。

+0

谢谢!这解决了我的问题! – bluebloodedboy 2011-06-02 06:20:11

+0

很高兴帮助:)(你可以通过点击左边的复选标记来接受这个答案) – 2011-06-02 11:52:08

+0

几年后,我仍然发现thia很有用。谢谢。 – 2015-04-20 10:13:43