0

我正在使用带有 winforms 的 .NET 4.5。我使用 ElementHost 是为了在我的应用程序中使用 XAML,其中唯一的 XAML 部分是功能区。我的应用程序有一个父 winform,托管多个子 winform。

当我单击应用程序中的任何子表单时,表单会按预期聚焦(GotFocus 事件处理程序)。但是,当我单击功能区上的任何下拉菜单时,子表单不再触发 GotFocus 处理程序,即使我仍然可以使用鼠标拖动表单。此外,当我单击功能区中未下拉的常规按钮时,子窗体将按预期激活 GotFocus 处理程序。

这是功能区中的示例下拉代码。如果我单击触发下拉菜单的主按钮,我将无法再触发任何子窗体上的 GotFocus 处理程序。

<RibbonMenuButton LargeImageSource="" >
    <RibbonMenuItem ImageSource = "" />
    <RibbonMenuItem ImageSource = "" />
    <RibbonMenuItem ImageSource = "" />
</RibbonMenuButton>

我可能发现了一个错误吗?

4

1 回答 1

0

对我来说似乎还可以。也许您可以修改此示例以重现您的问题:

        Form fff = new Form();
        ElementHost eh = new ElementHost() { Dock = DockStyle.Top };
        var dp = new System.Windows.Controls.DockPanel();
        eh.BackColor = Color.LightYellow;
        dp.Background = System.Windows.Media.Brushes.LightSkyBlue;
        eh.Child = dp;
        var combo = new System.Windows.Controls.ComboBox();
        combo.Items.Add("Value1");
        combo.Items.Add("Value2");
        combo.Items.Add("Value3");
        dp.Children.Add(combo); //new System.Windows.Controls.Button { Content = "Button Text" });
        fff.Controls.Add(eh);
        fff.IsMdiContainer = true;
        var fc1 = new Form { TopLevel = false, Visible = true, Size = new Size(300,300), Location = new Point(100,100) };
        var fc2 = new Form { TopLevel = false, Visible = true, Size = new Size(300,300), Location = new Point(100,100) };

        fc1.MdiParent = fff;
        fc2.MdiParent = fff;

        fc1.GotFocus += delegate {
            fc1.Text = "Got focus1";
        };
        fc2.GotFocus += delegate {
            fc2.Text = "got focus2";
        };
        fc1.LostFocus += delegate {
            fc1.Text = "Lost focus1";
        };
        fc2.LostFocus += delegate {
            fc2.Text = "Lost focus2";
        };


        Application.Run(fff);
于 2015-07-01T05:31:50.113 回答