首先,我是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);
}
所以真正的问题是:如何通过按其他用户控件中的按钮将用户控件添加到窗口?
谢谢,
调色剂
答案 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源文件