-1

ボタン (およびそれ以上) を持つユーザー コントロールがありますが、それをクリックして、メイン ウィンドウにそのユーザー コントロールの別のインスタンスを作成したいと考えています。

主要:

UserControl mycontrol1= new UserControl();            
mainwin.Children.Add(mycontrol1); 

mycontrolにはボタンがあり、クリックすると別のmycontrol2を作成したいのですが、これは機能しません

UserControl mycontrol2= new UserControl();   
this.Parent.Children.Add(mycontrol2);
this.Parent.FunctionOfMainProgIWantToRUn();

私は ActionScript の世界から来ており、これはそこで実行されますが、WPF ロジックを取得するのは困難です。

4

2 に答える 2

0

You are really doing this the wrong way around. The "right" way would be to have a model class that exposes a collection. You collection should then be bound to an ItemsControl (like list view) that then uses a DataTemplate to create your UserControl for each item in the list and bind it's properties.

The MVVM pattern is really worth learning about and makes WPF development much easier to manage and much easier to maintain. It looks like more work up-front, but it's really worth it in the long run.

于 2013-03-20T16:45:01.827 に答える
0

あなたの質問にアプローチできる1つの方法は、ユーザーコントロールでEvenHandlerを使用し、mainViewでサブスクライブすることです。ユーザーコントロールの発言ボタンをクリックするたびに、イベントを発生させます。

サンプルを作成しました:

ユーザーコントロールにテキストボックスとボタンがあります

これは分離コードです。

    public partial class UserControl1 : UserControl
{
    public event EventHandler<EventArgs> CreateNewUserControl = null;
    public static int InstanceCount = 0;
    public UserControl1()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(UserControl1_Loaded);
    }

    void UserControl1_Loaded(object sender, RoutedEventArgs e)
    {
        InstanceCount++;
        txtControl.Text = "Control - " + InstanceCount;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var handler = CreateNewUserControl;
        if (handler != null)
         handler.Invoke(sender,e);
    }
}

メインビューで:

Xaml:

   <StackPanel x:Name="UserControlTest" Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Right" Grid.Column="1" Grid.RowSpan="2" ScrollViewer.VerticalScrollBarVisibility="Auto" MaxHeight="800" Margin="30">

            <RadChartProject:UserControl1 x:Name="UserControl1"/>

        </StackPanel>

xaml.cs:

      public MainPage()
    {
        InitializeComponent();

        UserControl1.CreateNewUserControl += UserControl1_CreateNewUserControl;
    }

    void UserControl1_CreateNewUserControl(object sender, EventArgs e)
    {
        if(UserControlTest != null)
        {
            var control = new UserControl1();
            control.CreateNewUserControl += UserControl1_CreateNewUserControl;
            UserControlTest.Children.Add(control);
        }
    }
于 2013-03-20T17:42:01.193 に答える