当我们单击 DataGrid 行时,在 wpf 功能区窗口中加载另一个用户控件

Posted

技术标签:

【中文标题】当我们单击 DataGrid 行时,在 wpf 功能区窗口中加载另一个用户控件【英文标题】:Loading another userControl in wpf Ribbon Window when the we click on DataGrid row 【发布时间】:2012-06-04 18:57:13 【问题描述】:

请耐心阅读这篇文章...简要地说,我想要的是“当我 单击 DataGrid 行,这些值必须显示在另一个 表单(此处为 userControl)..”

我正在使用一个 Wpf 功能区窗口。该窗口分为两行。在第一行中,我填充了 Wpf 功能区,在第二行中,我填充了一个 Dock 面板以根据操作填充用户控件..

功能区有两个按钮

    显示所有员工 添加员工

我创建了两个 Usercontrol Forms 一个是输入员工详细信息,第二个是显示 DataGrid 中的所有记录..

现在我首先单击 Ribbon Button1 以显示所有员工详细信息,然后将 userControl "CtlGridDisplay" 加载到 DockPanel(位于 Ribbon 窗口中)并在 DataGrid 中显示所有详细信息。

现在我双击行并获取选定的行employeeId 然后我希望在另一个用户控件“CtlAddEmployee”中显示该详细信息并且此用户控件必须仅显示在该 DockPanel 中.. 为此我试图清除 Dockpanel并为控件“CtlAddEmployee”创建了对象并将该控件添加到 DockPanel.. 但 DockPanel 仍然填充 仅 DataGRid 即填充“CtlGridDisplay”...我不明白为什么...

为此,我还使用了事件和委托,它可以很好地执行所有代码,但 Dockpanel 没有被清除,也没有加载新控件。..

但是当我单击一个功能区按钮 1 时,它会加载“CtlGridDisplay”,当我单击功能区按钮 2 时,它会在 Dock 面板中很好地加载“CtlAddEmployee”...

但是当我尝试显示数据时,我在一个用户控件中单击 DataGrid 以显示在另一个控件中不起作用..

Events Delegate 方法代码如下...

在用户控件“CtlDisplayEmployeeList”中的代码是

public event MyOrganizationDetails.MainRibbonWinodw.DisplayEmployeeHandler DisplayemployeeEvent;

private void GridList_MouseDoubleClick(object sender, MouseButtonEventArgs e)

    MainRibbonWinodw mainRibbonobj = new MainRibbonWinodw();
    this.DisplayemployeeEvent += new MainRibbonWinodw.DisplayEmployeeHandler(mainRibbonobj.fnDisplayEmployeeDetails);
    if (GridList.SelectionUnit == DataGridSelectionUnit.FullRow)
    
        if (GridList.SelectedItems.Count > 0)
        
            for (int i = 0; i < GridList.SelectedItems.Count; i++)
            
                DataGrid dg = sender as DataGrid;
                EmployeeDetail detail = dg.SelectedItem as EmployeeDetail;
                string selectedEmp = detail.EmpId; //it gives Employee Id

                if (DisplayemployeeEvent != null)
                    DisplayemployeeEvent(selectedEmp);
             
        
    

在功能区窗口中......代码将......在这里处理事件......

public partial class MainRibbonWinodw : RibbonWindow

    public delegate void DisplayEmployeeHandler(string str);

    public void fnDisplayEmployeeDetails(string str)
    
        CtlAddEmployee frm2 = new CtlAddEmployee(str);
        DockPanelInRibbon.Children.Clear();
        DockPanelInRibbon.Children.Add(frm2);    
    

在另一个用户控件中..

构造函数...

public CtlAddEmployee(string str)

    InitializeComponent();
    fnDisplayingEmployee(str);

当我调试所有代码时,所有代码都被很好地触发,但“CtlAddEmployee”表单没有加载到 DockPanel...Dock 面板仍然使用该 DataGRid...我不知道为什么请告诉我解决方案...。 .

感谢您的耐心等待...阅读本文...

【问题讨论】:

【参考方案1】:

您也必须为停靠面板调用事件。例如 leftMouseButtonUp 和停靠你的用户控件。

【讨论】:

以上是关于当我们单击 DataGrid 行时,在 wpf 功能区窗口中加载另一个用户控件的主要内容,如果未能解决你的问题,请参考以下文章

Datagrid行选择事件,WPF

WPF 修改DataGrid选中行时的颜色

选择行时设置文本WPF DataGrid行的颜色

xml [WPF] DataGridの见た目などを共有してデータのみ実行时に指定

wpf datagrid 单元格如何默认单击一次点中

如何在WPF中模拟右键单击datagrid