我創建了一個WPF應用程序,其中包含一個「主要內容」 - 包含一個TabControl和一個「對話框」的圖層 - 包含一個ItemsControl的圖層。WPF中的「模態對話框」 - 使覆蓋塊關鍵事件
的XAML看起來是這樣的:
<Grid>
<TabControl>
..Some Tabs
</TabControl>
<ItemsControl>
<ContentControl Content={Binding Dialog1Property} />
<ContentControl Content={Binding Dialog2Property} />
</ItemsControl>
</Grid>
通常 「Dialog1Property」 和 「Dialog2Property」 是空的,這意味着ItemsControl的是看不見的。每當我爲其中的一個分配一個控件時,它就會顯示在TabControl的前面,這正是我想要的。如果我將不透明度爲0.7的灰色Rectangle指定給其中一個對話框屬性,則會創建一個灰色疊加層。
如果我點擊通過覆蓋層可以看到的標籤,則沒有任何反應 - 矩形會阻止鼠標事件。但是,仍然可以使用Tab-Key將TabControl聚焦到疊加層後面,因此即使顯示了對話框,也可以切換製表符。
有沒有一種簡單的方法來告訴矩形以某種方式阻止鍵盤事件,因爲它已經做好了Mouseclicks的準備?
問候 BBRain
這可能會解決問題,如果PreviewKeyDown - 事件將被解僱,似乎並非如此。任何想法爲什麼? PreviewMouseDown - 事件被正確觸發。當然,這並沒有多大幫助,因爲Mouseclicks被阻止了所有的準備... – BoltzmannBrain 2012-03-06 11:36:09
我通過在我的XAML結尾使用了一個文本框來繞過這個問題。然後,我創建了一個DataTrigger,對該文本框的「IsFocused」屬性的更改作出反應,其中我通過FocusManager的AttachedProperty將Focus設置爲對話框中的第一個元素,以便在對話框中重點排序循環。無論如何,我會接受你的答案,因爲它聽起來像是正確的解決方案,它不起作用的原因可能是與我的其他源代碼有關的問題。 – BoltzmannBrain 2012-03-06 13:35:31