如何在wpf中动态地将UserControl加载到Dockpanel中

如何在wpf中动态地将UserControl加载到Dockpanel中,wpf,events,delegates,Wpf,Events,Delegates,我使用的是RibbonWindow,在第一节中,我使用的是 ribbonBar按钮和其他控件,在第二节中我使用了DockPanel 显示/加载其他控件的步骤 我有两个用户控件,一个是使用TextBox 和下拉列表控件和另一个用户控件用于显示所有 DataGrid中的现有数据 这两个控件必须基于 条件,它位于RibbonWindow 现在,我想要的是,当我点击任何一个网格行时,我 需要将选定的GridRow数据填充到DisplayUserControl中 (userControl1)并且该user

我使用的是
RibbonWindow
,在第一节中,我使用的是 ribbonBar按钮和其他控件,在第二节中我使用了
DockPanel
显示/加载其他控件的步骤

我有两个用户控件,一个是使用
TextBox
下拉列表
控件和另一个用户控件用于显示所有 DataGrid中的现有数据

这两个控件必须基于 条件,它位于
RibbonWindow

现在,我想要的是,当我点击任何一个网格行时,我 需要将选定的GridRow数据填充到DisplayUserControl中 (userControl1)并且该userControl必须加载(替换第二个 用户控制)进入DockPanel

我所做的是

首先,我将
UserControl2
加载到
RibbonWindow
并填充网格数据

我使用ClickEvent获取了网格行的值
GridList\u MouseDoubleClick()

在该方法中,我调用了一个DelegateEvent来调用该方法 在MainRibbonWindow中声明

public void fnDisplayEmployeeDetails(string str,DockPanel dockPannel)
{
    //  dockPannel is to be cleared...
     this.Dispatcher.BeginInvoke((Action)delegate { dockPannel.Children.Clear(); }, null);  //To Clear the Dock Panel

    CtlAddEmployee frm2 = new CtlAddEmployee(str); //userControl1 and here str is Id of the Row...

    dockPannel.Children.Add(frm2);

}
该方法应该显示
DockPanel
,并加载另一个userControl。代码如下

以下方法位于MainRibbonWindow中

public void fnDisplayEmployeeDetails(string str,DockPanel dockPannel)
{
    //  dockPannel is to be cleared...
     this.Dispatcher.BeginInvoke((Action)delegate { dockPannel.Children.Clear(); }, null);  //To Clear the Dock Panel

    CtlAddEmployee frm2 = new CtlAddEmployee(str); //userControl1 and here str is Id of the Row...

    dockPannel.Children.Add(frm2);

}
这里所有的工作都完成了,但是
DockPanel
仍保留在 仅第二个用户控件(即仅显示网格)。dockpanel没有 替换为firstUserControl

如果我试图在另一个窗口的 Dockpanel,显示良好。我不知道为什么会这样奇怪 行为正在发生

public void fnDisplayEmployeeDetails(string str,DockPanel docPannel)
{
    this.Dispatcher.BeginInvoke((Action)delegate { docPannel.Children.Clear(); }, null);  //To Clear the Dock Panel

    CtlAddEmployee frm2 = new CtlAddEmployee(str);
    MainWindow mnWindow = new MainWindow();    //another window Form...
    mnWindow.MainWindowDock.Children.Add(frm2);
    mnWindow.ShowDialog();  //here it is showing well....
}

我应该如何在另一个usercontrol中显示网格值的详细信息,并且该usercontrol必须填写在同一Dockpanel中……

您是否尝试过不委派子控件的添加?我发现,当您从不同的线程访问UI组件时,可能会发生这些行为。对于不同的窗口(第二次测试有效),由于新窗口是在新线程中创建的,因此交互工作正常