![](/img/trans.png)
[英]Adding Children to StackPanel in Parent Window from UserControl in WPF/C#
[英]WPF: adding a usercontrol to a window
首先,我是 WPF 和 C# 的新手,所以也許我遇到的問題很容易解決。 但我現在有點卡住了。
讓我解釋一下我的問題。
我有一個 WPF 窗口和兩個用戶控件(控件和 ContentDisplayer)。
包含一些按鈕的用戶控件控件被添加到窗口的 XAML 中。 這里沒什么特別的。
窗口.XAML
<nv:Controls/>
現在,我想要做的是當用戶按下控件中的按鈕時,需要將 ContentDisplayer 添加到我的窗口中的 Scatterview 中。
我通過將按鈕添加到窗口解決了這個問題,而不是使用用戶控件控件。 但這不是我想要的。
窗口.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);
}
所以真正的問題是:如何通過按下其他用戶控件中的按鈕將用戶控件添加到窗口?
謝謝,
碳粉
在窗口頂部 xaml 添加
xmlns:d="clr-namespace:SomeNamespace.Usercontrols"
如果這些已經存在,您可以從智能列表中選擇控件的命名空間。
然后你想放置控件類型的位置:
<d:yourusercontrolhere params />
並且您的用戶控件可以添加到那里。
我不知道你想做什么你的例子,
所以你有一個這樣定義的控件:
public partial class somecontrolname : UserControl
使用相應的 Xaml 文件
要將它以代碼形式添加到窗口中,您需要做的就是首先在窗口中需要一個 LayoutRoot,例如 Grid 控件,然后只需
[mylayoutcontrol].Children.Add(new somecontrolname());
也許我弄錯了您要做什么,您的示例代碼對我來說沒有多大意義,看起來您正在嘗試加載 xaml 源文件
在控件中公開一個事件,當您想要添加新控件時會觸發該事件。
public event EventHandler AddControl;
private void RaiseAddControl()
{
if (AddControl!= null)
{
AddControl(this, EventArgs.Empty);
}
}
現在在您的窗口中接收該事件
yourControl.AddControl += ContactChanged
在您的窗口中,聽起來您需要將事件添加到 Controls 的實例中。
<local:ContentDisplayer>
...
<nv:Controls AddControl="ContactChanged"/>
...
然后在您的 ContactChanged 事件處理程序中,您可以實例化一個新的 Controls 控件並將其添加到您正在使用的任何集合中,就像在上面的 Button_ContactChanged 事件處理程序中一樣。
如果您需要進一步說明,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.