如何在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组件时,可能会发生这些行为。对于不同的窗口(第二次测试有效),由于新窗口是在新线程中创建的,因此交互工作正常