将UserControl从一个窗口添加到MainWindow

时间:2013-12-22 10:47:20

标签: c# wpf user-controls

我有一个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(**
        }

最后一行给出了一个错误,“非静态字段需要一个对象引用。”

2 个答案:

答案 0 :(得分:0)

WPF应使用MVVM模式进行编程。如果你以另一种方式做到这一点,你必须一直打WPF,而不是使用它的强大功能。如果你坚持用另一种方式做,至少让编译器满意:

MainWindow是应用程序类的实例变量。您不在应用程序类中,因此首先需要应用程序类的实例才能访问MainWindow。您还需要将其强制转换为Window类型。

答案 1 :(得分:0)

您可以使用MainWindow访问Application.Current.MainWindow,但它会返回Window类的实例。需要Typecasting将其转换为实际的类实例,即MainWindow。

这应该有效:

((MainWindow)Application.Current.MainWindow).gbDiagDesign.Add(entcon);