0

我的目标是在用户以只读模式进入 UI 时禁用控件(文本框、单选按钮、...)及其所有子项(例如 tabitem 的选项卡)。

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

这是通过在 SO 上找到的以下代码优雅地完成的。这样做可以让 IsEnabled 属性继承给它的所有子项,同时允许启用滚动条。

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

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

你将如何启用滚轮?

在此处输入图像描述

4

1 回答 1

0

我不完全确定,但我猜它不起作用,因为没有为非活动控件处理任何事件-> 在禁用的选项卡页上使用鼠标滚轮没有任何作用。如果您启用单个标签页,它可能会起作用,但不是它的控件。

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

如何捕获控件上的所有鼠标事件?

(更多信息: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

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

于 2013-01-16T14:40:31.630 回答