WPF:将一个usercontrol添加到窗口

时间:2009-04-21 10:04:50

标签: c# wpf user-controls

首先,我是WPF和C#的新手,所以也许我遇到的问题很容易解决。但我现在有点陷入困境。

让我解释一下我的问题。

我有一个WPF窗口和两个用户控件(Controls和ContentDisplayer)。

在窗口的XAML中添加了包含一些按钮的usercontrol控件。 这里没什么特别的。

Window.XAML

<nv:Controls/>

现在,我想要做的是当用户按下Controls中的按钮时,需要将ContentDisplayer添加到我窗口中的Scatterview中。

我通过向窗口添加按钮而不使用usercontrol控件来解决了这个问题。但这不是我想要的。

Window.XAML.CS

private static void Button_ContactChanged(object sender, ContactEventArgs e)
    {
      object ob = Application.LoadComponent(new Uri(
      "NVApril;component\\XAML\\ContentDisplayer.xaml",
      System.UriKind.RelativeOrAbsolute));

    //Set a unique name to the UserControl
      string name = String.Format("userControl{0}",
      SurfaceWindow1_Scatterview.Items.Count);
      UserControl userControl = ob as UserControl;
      userControl.Name = name;

    //Add the new control to the Scatterview
      SurfaceWindow1_Scatterview.Items.Add(userControl);
      SurfaceWindow1_Scatterview.RegisterName(name, userControl);
    }

所以真正的问题是:如何通过按其他用户控件中的按钮将用户控件添加到窗口?

谢谢,

调色剂

5 个答案:

答案 0 :(得分:3)

在窗口顶部xaml add

xmlns:d="clr-namespace:SomeNamespace.Usercontrols"

您已经存在这些内容,您可以从intellesence列表中选择控件的命名空间。

然后您要放置控件类型:

<d:yourusercontrolhere params />

并且可以在那里添加您的用户控件。

答案 1 :(得分:2)

谷歌将这个问题排在高位,但没有接受答案。

尝试this similar question的答案。

答案 2 :(得分:0)

在Controls中,公开了当您想要添加新控件时触发的事件。

public event EventHandler AddControl;

private void RaiseAddControl()
{
    if (AddControl!= null)
    {
        AddControl(this, EventArgs.Empty);
    }
}

现在在窗口中接收该事件

yourControl.AddControl += ContactChanged

答案 3 :(得分:0)

在您的窗口中,听起来您需要将事件添加到控件的实例中。

<local:ContentDisplayer>
...
  <nv:Controls AddControl="ContactChanged"/>
...

然后在您的ContactChanged事件处理程序中,您可以实例化一个新的Controls控件,并将其添加到您正在使用的任何集合中,就像上面的Button_ContactChanged事件处理程序一样。

如果您需要进一步澄清,请与我们联系。

答案 4 :(得分:0)

我不知道你想要做什么,

所以你定义了一个控件:

public partial class somecontrolname : UserControl

使用相应的Xaml文件

您需要做的就是将代码添加到窗口中首先需要在窗口中使用LayoutRoot,例如Grid控件,然后只需

[mylayoutcontrol] .Children.Add(new somecontrolname());

也许我错误地想到你要做什么,你的示例代码对我来说没有多大意义,看起来你正试图加载xaml源文件