0

我正在使用RibbonWindow, 在第一部分中我使用ribbonBar 按钮和其他控件,在第二部分中我曾经DockPanel 显示/加载其他控件

我有两个用户控件,一个是使用TextBoxDropDown控件显示详细信息,另一个用户控件是显示 DataGrid 中的所有现有数据。

这两个控件必须根据 Condition 放置在 DockPanel 中,它位于RibbonWindow...

现在,我想要的是,当我单击任何 Grid 行时,我需要将选定的 GridRow 数据填充到 DisplayUserControl(userControl1)中,并且 userControl 必须加载(替换第二个 userControl)到该 DockPanel ...

我所做的是......

UserControl2首先,我加载DockpanelRibbonWindow填充 Grid 数据

我已经使用 ClickEvent
( GridList_MouseDoubleClick())获取了网格行的值

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

该方法应该显示DockPanel并加载另一个用户控件。代码如下。

下面的方法在 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(即仅显示网格)。停靠面板未替换为 firstUserControl

如果我试图在另一个 Window 的 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....
}

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

4

1 回答 1

0

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

于 2012-07-02T15:59:27.803 回答