SilverLight

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


あなたのお住まいの地域で最安のブロードバンド選び

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016/04/29 (金) 11:41:35 (2940d)

e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze