再次启用滚动

时间:2013-01-16 14:19:27

标签: wpf wpf-controls

我的目标是在用户以只读模式进入用户界面时禁用控件(textboxe,radiobutton,...)及其所有子项(例如tabitem的选项卡)。

唯一的例外是滚动条,即使它是只读的也应该启用。

这是通过在SO上找到的以下代码进行的。这样做可以让IsEnabled属性继承所有子节点,同时允许启用滚动条。

public class AlwaysEnabledTabControlTabItem : TabItem
{
    static AlwaysEnabledTabControlTabItem()
    {
            IsEnabledProperty.OverrideMetadata(
                                               typeof(AlwaysEnabledTabControlTabItem),
                                               new FrameworkPropertyMetadata(
                                                   null,
                                                   (o,
                                                    value) => true));
    }
}

问题在于鼠标的滚轮(以及向上/向下翻页键)不再起作用。 当您在选项卡上并且想要滚动时没有任何反应。作为侧节点,如果您在窄滚动条本身上,鼠标滚轮就可以工作。

您如何启用滚轮?

enter image description here

1 个答案:

答案 0 :(得分:0)

我不完全确定,但我猜它不起作用,因为没有处理非活动控件的事件 - >在禁用的标签页上使用鼠标滚轮什么都不做。如果您启用单个标签页而不是其控件,则它可能有效。

否则你可以尝试使用WndProc捕获鼠标输入,如下所示:

How can I trap all mouse events on a control?

(更多信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc.aspx

然后使用它来更改滚动位置(您可能需要在使用自动滚动时启用控件):

http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.autoscrollposition.aspx

应该有类似拦截键盘输入的东西,但不幸的是我没有任何关于它的信息。