J'ai un DataGrid défini avec WPF Toolkit. Le CellEditingTemplate de ce DataGrid est associé à l'exécution avec une fonction personnalisée qui génère un élément FrameworkElementFactory.Accès au contrôle DataTemplate de WPF Toolkit DataGridCell au moment de l'exécution, comment?
Maintenant, je dois accéder au contrôle qui est inséré dans DataTemplate de CellEditingTempleta, mais je ne sais pas comment faire.
sur le Web, j'ai trouvé un Helper ListView utile ...
public static class ListViewHelper
{
public static FrameworkElement GetElementFromCellTemplate(ListView listView, Int32 column, Int32 row, String name)
{
if (row >= listView.Items.Count || row < 0)
{
throw new ArgumentOutOfRangeException("row");
}
GridView gridView = listView.View as GridView;
if (gridView == null)
{
return null;
}
if (column >= gridView.Columns.Count || column < 0)
{
throw new ArgumentOutOfRangeException("column");
}
ListViewItem item = listView.ItemContainerGenerator.ContainerFromItem(listView.Items[row]) as ListViewItem;
if (item != null)
{
GridViewRowPresenter rowPresenter = GetFrameworkElementByName<GridViewRowPresenter>(item);
if (rowPresenter != null)
{
ContentPresenter templatedParent = VisualTreeHelper.GetChild(rowPresenter, column) as ContentPresenter;
DataTemplate dataTemplate = gridView.Columns[column].CellTemplate;
if (dataTemplate != null && templatedParent != null)
{
return dataTemplate.FindName(name, templatedParent) as FrameworkElement;
}
}
}
return null;
}
private static T GetFrameworkElementByName<T>(FrameworkElement referenceElement) where T : FrameworkElement
{
FrameworkElement child = null;
for (Int32 i = 0; i < VisualTreeHelper.GetChildrenCount(referenceElement); i++)
{
child = VisualTreeHelper.GetChild(referenceElement, i) as FrameworkElement;
System.Diagnostics.Debug.WriteLine(child);
if (child != null && child.GetType() == typeof(T))
{
break;
}
else if (child != null)
{
child = GetFrameworkElementByName<T>(child);
if (child != null && child.GetType() == typeof(T))
{
break;
}
}
}
return child as T;
}
}
ce travail de code avec l'objet ListView mais pas avec l'objet DataGrid.
Comment utiliser quelque chose comme ça dans DataGrid?
L'accès au contrôle créé par DataTemplate est délicat car il y a très peu de raison de le faire. Qu'est-ce que vous essayez d'accomplir? –