.NET功能区下拉列表-Can';你不关注儿童形态吗?
我将.NET4.5与winforms一起使用。我使用ElementHost是为了在我的应用程序中使用XAML,其中唯一的XAML部分是Ribbon。我的应用程序有一个父winform,托管多个子winforms 当我单击应用程序中的任何子窗体时,窗体将按预期聚焦(GotFocus事件处理程序)。但是,当我单击功能区上的任何下拉列表时,子窗体不再触发GotFocus处理程序,即使我仍然可以用鼠标拖动窗体。此外,当我单击功能区中未下拉的常规按钮时,子窗体将按预期激活GotFocus处理程序 下面是功能区中的示例下拉代码。如果单击触发下拉列表的主按钮,则无法再在任何子窗体上触发GotFocus处理程序.NET功能区下拉列表-Can';你不关注儿童形态吗?,.net,winforms,xaml,ribbon,elementhost,.net,Winforms,Xaml,Ribbon,Elementhost,我将.NET4.5与winforms一起使用。我使用ElementHost是为了在我的应用程序中使用XAML,其中唯一的XAML部分是Ribbon。我的应用程序有一个父winform,托管多个子winforms 当我单击应用程序中的任何子窗体时,窗体将按预期聚焦(GotFocus事件处理程序)。但是,当我单击功能区上的任何下拉列表时,子窗体不再触发GotFocus处理程序,即使我仍然可以用鼠标拖动窗体。此外,当我单击功能区中未下拉的常规按钮时,子窗体将按预期激活GotFocus处理程序 下面是功
<RibbonMenuButton LargeImageSource="" >
<RibbonMenuItem ImageSource = "" />
<RibbonMenuItem ImageSource = "" />
<RibbonMenuItem ImageSource = "" />
</RibbonMenuButton>
我有没有发现一只虫子 我觉得还可以。也许您可以修改此示例以重新创建您的问题:
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);
当有两个或多个表单打开时,问题就消失了。当用户单击另一个表单时,当再次单击该表单时,会重新激活原始表单的焦点。但是,如果只有一个表单处于打开状态,则该表单似乎会永久失去焦点。这并不理想,但解决方法是添加Focusable=“False”,如下所示:。我仍然没有找到合适的方法将注意力转移回目标子表单上,至少在没有任何异常攻击的情况下。