0

私の目標は、ユーザーが読み取り専用モードで UI に入ったときに、コントロール (textboxe、radiobutton、...) とそのすべての子 (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 に答える