有兩種焦點:鍵盤焦點和邏輯焦點。引自MSDN:
鍵盤焦點是指接收鍵盤輸入的元素,而邏輯焦點是指焦點範圍內的焦點範圍內的元素。 Keyboard類主要關注鍵盤焦點,FocusManager主要關注邏輯焦點,但這不是絕對的區別。具有鍵盤焦點的元素也將具有邏輯焦點,但具有邏輯焦點的元素不一定具有鍵盤焦點。當您使用Keyboard類設置具有鍵盤焦點的元素時,這是顯而易見的,因爲它還設置了元素的邏輯焦點。
在這種情況下,ScrollViewer
可以接受或拒絕邏輯焦點,它與鍵盤焦點相關聯。默認控制通常有Focusable="True"
,這同樣適用於ScrollViewer
。
也就是說,當Focusable="True"
,ScrollViewer
有一個虛線框(與邏輯焦點):
![enter image description here](https://i.stack.imgur.com/uF1Ym.png)
當Focusable="False"
ScrollViewer
沒有一個虛線框,因爲現在他不接受邏輯焦點。您還可以在FocusVisualStyle
的幫助下自定義焦點的外觀。
正如您所看到的,沒有提及鼠標事件,唯一能夠影響它的事件 - 這是一個鍵盤事件。沒有觸發事件,則需要設置元素IsEnabled="False"
,或阻止使用e.Handled = true;
事件呼叫:
private void ScrollViewer_MouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
MessageBox.Show("MouseDown!"); // now when you click, it will not be displayed
}
關於你的第二個問題,我想你正確地寫道。