2016-03-14 90 views
0

如果之前詢問過此問題,我很抱歉。 在這裏搜索1小時後,我無法找到它。從選定的選項卡中的ManWindow發生火災事件

首先,我使用的是WPF,但不是MVVM。我知道MVVM是要走的路,我正在學習它。我是編程新手。

這是一個小程序,我在一個StackPanel中的主窗口上有按鈕,而另一個上有TabControl(_tabcntrl)。

在按鈕點擊主窗口生成一個標籤:

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

在用戶控件我有一個公共事件

public void test() 
{ 
    //some code 
} 

所以我的問題是如何火從在主主窗口(按鈕單擊此事件窗口),但僅限於選定的選項卡中。想法是,你可以有多個標籤具有相同的用戶控件。

我知道我可以用

_uc.test(); 

但在創建標籤,只有當做到這一點。

此外,我試圖把

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

在按鈕的單擊事件,但我得到的錯誤。

愚蠢的是,我想出瞭如何從usercontrol引發事件,我不能以其他方式。感到非常愚蠢的第一個問這個問題。

謝謝你,對不起我的英語不好

回答

0

有各種不同的選項,你可以找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(); 
} 
+0

Thx for VisualTree and Children property。 我發現簡單的方法僅具有兩個行代碼對將selectedItem僅 // Game_settings是用戶控件 的名稱 VAR CTRL = _tabcntrl.SelectedContent作爲Game_settings; ctrl.test(); – ostomac

+0

太好了,但是請注意,只有當選項卡中有_only_ UserControl時,您的解決方案才能正常工作,當您有多個控件或項目層次結構時,這可能會失敗。 –

+0

在這種情況下,它會。但是,提高頭腦,我會記住這一點。 – ostomac