DataGridのDetailsTemplateにさらにDataGridコントロールを定義すれば、ネストDataGridを実現できます。。 ソースコード例: <sdk:RowDetailsTemplate> <DataTemplate> <sdk:DataGrid ItemsSource="{Binding YourChildCollectionPropertyName}" /> </DataTemplate> </sdk:RowDetailsTemplate> 下記の例のように、親のDataGridの「RowDetailsVisibilityChanged」イベント内「e.DetailsElement」オブジェクトからネストDataGrid内の要素を取得できます。 private void dataGrid1_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e) { TextBox tb = MyVisualTreeHelper.SearchFrameworkElement(e.DetailsElement, "TextboxAdoptionType") as TextBox; if (tb != null) { } } public class MyVisualTreeHelper { /// <summary> /// Get the child FrameworkElement with a given name /// from the visual tree of a parent FrameworkElement. /// </summary> /// <param name="parentFrameworkElement">Parent FrameworkElement</param> /// <param name="childFrameworkElementNameToSearch">Child FrameworkElement name</param> /// <returns>Child FrameworkElement with a given name</returns> public static FrameworkElement SearchFrameworkElement(FrameworkElement parentFrameworkElement, string childFrameworkElementNameToSearch) { FrameworkElement childFrameworkElementFound = null; SearchFrameworkElement(parentFrameworkElement, ref childFrameworkElementFound, childFrameworkElementNameToSearch); return childFrameworkElementFound; } /// <summary> /// Get All Child FrameworkElement of given FrameworkElement ///</summary> /// <param name="parentElement">Parent FrameworkElement whose child FrameworkElement's will be searched</param> /// <returns>List of Child FrameworkElement</returns> public static List<FrameworkElement> GetAllChildFrameworkElement(FrameworkElement parentElement) { List<FrameworkElement> childFrameworkElementFound = new List<FrameworkElement>(); SearchAllChildFrameworkElement(parentElement, childFrameworkElementFound); return childFrameworkElementFound; } //SearchFrameworkElement helper private static void SearchFrameworkElement(FrameworkElement parentFrameworkElement, ref FrameworkElement childFrameworkElementToFind, string childFrameworkElementName) { int childrenCount = VisualTreeHelper.GetChildrenCount(parentFrameworkElement); if (childrenCount > 0) { FrameworkElement childFrameworkElement = null; for (int i = 0; i < childrenCount; i++) { childFrameworkElement = (FrameworkElement)VisualTreeHelper.GetChild(parentFrameworkElement, i); if (childFrameworkElement != null && childFrameworkElement.Name.Equals(childFrameworkElementName)) { childFrameworkElementToFind = childFrameworkElement; return; } SearchFrameworkElement(childFrameworkElement, ref childFrameworkElementToFind, childFrameworkElementName); } } } //GetAllChildFrameworkElement helper private static void SearchAllChildFrameworkElement(FrameworkElement parentFrameworkElement, List<FrameworkElement> allChildFrameworkElement) { int childrenCount = VisualTreeHelper.GetChildrenCount(parentFrameworkElement); if (childrenCount > 0) { for (int i = 0; i < childrenCount; i++) { FrameworkElement childFrameworkElement = (FrameworkElement)VisualTreeHelper.GetChild(parentFrameworkElement, i); allChildFrameworkElement.Add(childFrameworkElement); SearchAllChildFrameworkElement(childFrameworkElement, allChildFrameworkElement); } } } } あなたのお住まいの地域で最安のブロードバンド選び コメント: |