2013-01-16 414 views
0

我的目標是當用戶以只讀模式進入用戶界面時禁用控件(文本框,單選按鈕等)及其所有子項(例如tabitem的選項卡)。再次啓用滾動

唯一的例外是應該啓用的滾動條,即使它是隻讀的。

這是通過在SO上找到的以下代碼大膽地完成的。這樣做可以讓IsEnabled屬性繼承它的所有子級,同時允許啓用滾動條。

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

問題是鼠標滾輪(和頁面向上/向下鍵),它不再工作。 當您在選項卡上並且想要滾動時,什麼都不會發生。作爲一個側面節點,如果你在狹窄的滾動條上,那麼鼠標滾輪就可以工作。

如何啓用滾輪?

enter image description here

回答

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

應該有類似於攔截鍵盤輸入的東西,但不幸的是我沒有任何有關這方面的信息。