我有一个Mainwindow和一个groupbox。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.MainWindow"
Title="MainWindow"
Height="600" Width="800">
<Grid x:Name="MainGrid">
<GroupBox Header="Diagram Design" Name="gbDiagDesign">
</GroupBox>
</Grid>
</Window>
一个简单的UserControl
<UserControl x:Class="WpfApplication1.Controls.EntityControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="100">
<Grid>
<Button x:Name="btn_show" Content="show me" />
</Grid>
</UserControl>
另一个窗口中有一个OK按钮, 问题是在按下OK按钮后如何将UserControl添加到MainWindow中的Groupbox。
public partial class NewEntity
{
public NewEntity()
{
InitializeComponent();
}
private void OK_Click(object sender, RoutedEventArgs e)
{
EntityControl entcon = new EntityControl();
**MainWindow.gbDiagDesign.Children.Add(**
}
最后一行给出了一个错误,“非静态字段需要一个对象引用。”
答案 0 :(得分:0)
WPF应使用MVVM模式进行编程。如果你以另一种方式做到这一点,你必须一直打WPF,而不是使用它的强大功能。如果你坚持用另一种方式做,至少让编译器满意:
MainWindow是应用程序类的实例变量。您不在应用程序类中,因此首先需要应用程序类的实例才能访问MainWindow。您还需要将其强制转换为Window类型。
答案 1 :(得分:0)
您可以使用MainWindow
访问Application.Current.MainWindow
,但它会返回Window
类的实例。需要Typecasting
将其转换为实际的类实例,即MainWindow。
这应该有效:
((MainWindow)Application.Current.MainWindow).gbDiagDesign.Add(entcon);