在选定的选项卡中从 ManWindow 触发事件

Fire event from ManWindow in selected tab

如果之前有人问过这个问题,我很抱歉。 在这里搜索了 1 小时后我找不到它。

首先,我使用的是 WPF,而不是 MVVM。我知道 MVVM 是可行的方法,我正在学习它。我是编程新手。

它是一个小程序,我在一个 StackPanel 的主 window 上有按钮,在另一个 StackPanel 上有 TabControl (_tabcntrl)。

单击主按钮window 生成一个选项卡:

TabItem _tab = new TabItem();
UserControl _uc = new UserControl();
_tab.Content = _uc;
_tabcntrl.Items.Add(tab);

在用户控件中我有一个 public 事件

public void test()
{
   //some code
}

所以我的问题是如何从主 window 触发此事件(在主 window 中单击按钮),但仅限于选定的选项卡。想法是您可以拥有多个具有相同用户控件的选项卡。

我知道我可以做到

_uc.test();

但仅在创建选项卡时。

我也试过

    TabItem tb = _tabcntrl.SelectedItem;
    tb.test();

在按钮点击事件中,出现错误。

愚蠢的事情是我弄清楚了如何从用户控件触发事件,但我别无选择。第一次问这个感觉很蠢。

谢谢,抱歉我的英语不好

有多种选择,您可以寻找 VisualTree 或简单地使用 ControlChildren 属性 并找到相应的元素。

TabItem tb = _tabcntrl.SelectedItem;
var childControls = control.Children.OfType<UserControl>(); // your controltype

// I'm looping through all child controls of type 'UserControl' but you can customize to your case.

foreach(var control in childControls)
{
     // execute control logic here
     control.test();
}