-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

你真的做错了。“正确”的方法是拥有一个公开集合的模型类。然后您的集合应该绑定到一个ItemsControl(如列表视图),然后使用 a为列表中的每个项目DataTemplate创建您的并绑定它的属性。UserControl

MVVM模式非常值得学习,它使 WPF 开发更易于管理和维护。看起来需要更多的前期工作,但从长远来看确实值得。

于 2013-03-20T16:45:01.827 回答
0

我可以解决您的问题的一种方法是:在 Usercontrol 中使用 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);
    }
}

在主视图中:

xml:

   <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>

xml.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 回答