2011-05-23 10 views
7

Suponiendo que tengo un control arbitrario dentro de una DataGridTemplateColumn, deseo saber cómo obtener el control, dado que he recuperado la DataGridCell que contiene ese control.Obteniendo un control de una DataGridCell

Mi archivo XAML que contiene la cuadrícula de datos es el siguiente:

<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>... 

I recuperado los DataGridCell utilizando métodos de extensión de la siguiente manera:

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

Los métodos de extensión, contenido en una clase estática es encontrado here

La pregunta es, ¿cómo puedo recuperar el "PorcentajeEditor", una vez que obtuve el DataGridCell? Alguien puede ayudarme? Cualquier ayuda sería muy apreciada. ¡Gracias!

Respuesta

11

Puede usar el nombre del control para buscarlo en la plantilla, p.

<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); 

Nota sin embargo, que esto normalmente debería no ser necesario ya que la modificación de los controles de plantilla en su mayor parte se puede hacer uso de los datos, propiedades y eventos adjuntos vinculante solo. En general, restringiría el acceso a la plantilla por código a los controles personalizados (que a menudo tienen designated parts).

+0

Gracias! ¡Eso resolvió mis problemas! – bluebloodedboy

+0

Me alegro de que haya ayudado :) (Usted podría aceptar esta respuesta haciendo clic en el contorno de la marca de verificación a la izquierda) –

+0

Un par de años después, todavía encontré útil. Gracias. –

Cuestiones relacionadas