我有一个带按钮的用户控件(等等),但是我想点击它来在主窗口中创建该用户控件的另一个实例。
主:
UserControl mycontrol1= new UserControl();
mainwin.Children.Add(mycontrol1);
在mycontrol中有一个按钮点击我想创建另一个mycontrol2但这不起作用
UserControl mycontrol2= new UserControl();
this.Parent.Children.Add(mycontrol2);
this.Parent.FunctionOfMainProgIWantToRUn();
我来自ActionScript世界,这将在那里运行,但WPF逻辑很难获得。
答案 0 :(得分:0)
你真的这样做是错误的。 “正确”的方式是拥有一个公开集合的模型类。然后,您应该将集合绑定到ItemsControl
(如列表视图),然后使用DataTemplate
为列表中的每个项目创建UserControl
并绑定它的属性。
MVVM模式非常值得学习,使WPF开发更容易管理,更易于维护。它看起来更像是前期工作,但从长远来看它确实值得。
答案 1 :(得分:0)
我可以解决您的问题的一种方法是:在Usercontrol中使用EvenHandler并在mainView中订阅它。在每个说按钮上单击Usercontrol引发事件。
我刚创建了一个示例:
我们在Usercontrol中有文本框和按钮
这是代码隐藏的;
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);
}
}
在MainView中:
的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);
}
}