2017-01-09 72 views
3

可以說我在XAML中有兩個元素。爲了說明的目的,可以說我有一個列表視圖和一個網格。就像這樣:允許鼠標消息的子集通過WPF中的控件

<ListView Name="MyList> /> 
<Grid Name="MyGrid" Background="#80FF0000"/> 

我使用網格放置一個大紅色半透明疊加在列表視圖的頂部(即網格是在Z順序更高)。

現在,這種安排意味着網格將阻止鼠標消息進入底層列表視圖,這正是我想要的......而且這一點很好。

但意想不到的結果是,網格還會阻止listview接收鼠標滾輪消息,這不是我想要的。

所以我想知道是否有可能擺動網格的命中測試,允許鼠標消息經過到底層的列表視圖,但仍阻止右/左鍵單擊,拖動等等。

或者,是否有可能在網格上預覽mousewheel消息並將它們轉發到底層的listview?

我對任何xaml或代碼隱藏解決方案感到滿意。 (我發誓我以前做過這件事,但對於我的生活,我似乎無法找出一個簡單的方法)。

回答

0

我不知道有什麼方法可以使某些鼠標事件觸及可測試,而其他鼠標事件不會觸發 - 這與您當前的安排無關。但是,如果ListViewGrid的孩子,則可以利用路由事件來實現所需的行爲。在這種情況下,您想要更改ListView而不是Grid的不透明度。最終用戶不會更聰明 - 它應該看起來仍然像ListView頂部的半透明覆蓋層。

<Grid Name="MyGrid" 
     Background="#FFFF0000"> 
    <ListView Name="MyList" 
       Opacity="0.5" /> 
</Grid> 

然後在後面的代碼,如果你讓「MyGrid」處理PreviewMouseDown事件,這將阻止MouseDown事件冒泡爲「MYLIST」,但仍然允許通過MouseWheel事件。

this.MyGrid.PreviewMouseDown += (o, e) => 
{ 
    e.Handled = true; 
}; 
相關問題