2011-07-13 66 views
1

這是我的元素樹的組成方式(刪除了不相關的信息)。路由事件和滾動查看器

<TabItem Style="Click_PutNormalCursorBack"> 
    <ScrollViewer> 
     <ItemsControl Style="ContainsMuchLabels_n_CollapsibleGroupeHeaders"> 
     <Label Style="Click_ChangeCursor" /> 
     </ItemsControl> 
    <ScrollViewer> 
</TabItem> 

我正在模擬Drag n Drop。當你點擊可點擊的標籤時,它會轉換你的光標以引導你拖動它的印象。我想要的是單擊TabItem,它會放回正常光標。

我不能使用PreviewMouseDown事件,因爲它永遠不會允許點擊標籤。

一個解決方案,我發現這是加入一個大的面板,以我的ScrollViewer和我有一個透明背景收到點擊的ItemsControl之間我的元素樹,把事件處理程序上我的ItemsControl的CollapsibleGroupHeader ItemsPanel,但它不是一個真正的完美的解決方案。

我在WPF艱難RoutedEvents其中療法以解決此類問題...

注:我的處理是不是我的我的風格,款式,其中只對療法更guiving信息

是療法比我的更好的解決方案?

回答

1

對兩者都使用MouseDown事件。如果事件不適用,請不要標記處理的事件(e.Handled = true)。例如,在可點擊的標籤中,如果在光標未處於拖動狀態時單擊該標籤,則不要標記已處理。一旦光標處於拖動狀態,如果用戶再次點擊可點擊標籤,則不要標記處理狀態(除非您希望該事件重置光標)。您也可以在選項卡上使用PreviewMouseDown事件,但不要標記處理,除非該點擊來自源自標籤的光標。

如果您不標記處理的事件,它會繼續傳播,以便多個控件可以處理它。即使標記處理事件並且您仍然想要處理事件,即使標記爲處理時也可以進行事件觸發:請參閱this article

+0

Verry good idea(請參閱「添加即使事件被標記處理時仍會引發的實例處理程序」使用e.OriginalSource。 – Gab