1

私は UserControl の複数のインスタンスを作成している WPF ウィンドウを作成しています。for ループを使用して UserControl の新しいインスタンスを作成していますが、UserControl インスタンスに別の名前を付けるにはどうすればよいですか? これは私がやっていることです:

    for(i=0; i<5; i++)
    {
        MyUserControl <name> = new MyUserControl ();
        /*code to change the properties of usercontrol*/
        SomeStackPanel.Children.Add(<name>);
    }
4

3 に答える 3

7

次のようにNameプロパティを使用するだけです。

        StackPanel sp = new StackPanel();
        for (int i = 0; i < 5; i++)
        {
            UserControl uc = new UserControl();
            uc.Name = "name"+i; // add your name here
            sp.Children.Add(uc);
        }

編集

コメントであなたの質問に答えるには、コントロールを取得する方法

        var list = sp.Children.Cast<UserControl>();             // now we are able to use Linq
        var sublist = list.Where(item => item.Name == "name1"); // searching for all UserControl with the Name "name1"
        var uControl = sublist.FirstOrDefault();                // will result inyour UserControl or null

        //same as above just in one line
        var uControl2 = sp.Children.Cast<UserControl>().Where(item => item.Name == "name2").FirstOrDefault();
于 2013-07-03T11:42:26.257 に答える
2

FrameworkElement.RegisterNameコントロールに使用して、新しい名前付き要素が追加されたことを WPF に通知する必要があります。

//If you are creating stack panel in code you need to uncomment next line
//NameScope.SetNameScope(SomeStackPanel, new NameScope());

for(i=0; i<5; i++)
{
    MyUserControl control = new MyUserControl ();

    control.Name = "name" + i;

    SomeStackPanel.RegisterName(control.Name, control);
    SomeStackPanel.Children.Add(control);

}

詳しくはRegisterName こちらをご覧ください。

于 2013-07-03T14:46:02.477 に答える