我正在嘗試將一個事件從一個孩子的用戶控件發送到它的父代。如何在Silverlight usercontrols中冒泡事件?
孩子用戶控件是網格內的按鈕:
<UserControl>
<Grid>
<Button Click="Button_Click" />
</Grid>
</UserControl>
父用戶控件由子控制的許多實例組成:
<UserControl>
<StackPanel>
<customs:myButton CustomClick="something" />
<customs:myButton CustomClick="something" />
<customs:myButton CustomClick="something" />
etc.
</StackPanel>
</UserControl>
在孩子用戶控件我已經定義:
public delegate void CustomClickHandler(object sender, EventArgs e);
public event CustomClickHandler CustomClick;
和「內部」按鈕以這種方式處理單擊事件:
private void Button_Click(object sender, EventArgs e)
{
if (CustomClick != null)
CustomClick (sender, e);
}
我試着檢查它是怎麼回事,我可以看到Button_Click被調用,CustomClick不是null並且它被執行。然而,似乎沒有發生,即使在父級用戶控件中附加的代碼也不會被調用。
有什麼建議嗎?
在此先感謝, 乾杯, Gianluca。
感謝您的回覆。我認爲這是問題,我試圖自己實施冒泡的事情。很好,一個lib已經存在。不過,我認爲我面臨着其他一些問題:我可以通過「TAB」移動「myButton」的幾個實例,但我無法通過使用鼠標選擇任何一個或與它們進行交互......你認爲這是什麼問題有點相關? – 2011-03-09 17:10:20
如果您的routedevents特定於鼠標,您可能會跳過處理該按鈕本身的事件。州有效嗎?如鼠標懸停等。 – 2011-03-09 17:14:34
快速更新。父用戶控件位於另一個用戶控件內(shellView包含小鍵盤,其中包含許多按鈕)。我可以看到爲shellView中定義的第一個Grid啓動了一個mouseleftdown事件。如果我試圖在其他任何內部控制中發現事件,它就不起作用。任何想法? – 2011-03-09 17:17:23