焦点有两种类型:键盘焦点和逻辑焦点。引用MSDN:
键盘焦点是指接收键盘输入的元素,逻辑焦点是指焦点范围内具有焦点的元素。Keyboard 类主要关注键盘焦点,而 FocusManager 主要关注逻辑焦点,但这并不是绝对的区别。具有键盘焦点的元素也将具有逻辑焦点,但具有逻辑焦点的元素不一定具有键盘焦点。当您使用 Keyboard 类设置具有键盘焦点的元素时,这一点很明显,因为它还将逻辑焦点设置在元素上。
在这种情况下,ScrollViewer
可以接受或拒绝逻辑焦点,它与键盘焦点相关联。默认控件通常都有Focusable="True"
,同样适用ScrollViewer
。
也就是说,当Focusable="True"
,ScrollViewer
有一个虚线框(具有逻辑焦点):
什么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
}
至于你的第二个问题,我认为你写得对。