2014-03-07 225 views
0

我已經實現了一個基於幾個博客來源,基本上允許展開/摺疊基於雙擊事件的網格拆分器。WPF GridSplitter - 如何禁用鼠標拖動和鍵盤調整大小

拆分器位於網格的兩列之間,表示屏幕布局,左側爲NavigationPanel,右側爲MainContentPanel,拆分器允許將NavigationPanel摺疊到只顯示圖標的最小寬度。

當允許拖動分離器和鍵盤調整時,是否有辦法禁用網格分離器的默認行爲?

我的當前的解決方法是通過設置可調焦爲False

  • 防止使用者通過將切換按鈕控件上層建築相同的作爲GridSplitter「抓住」的分離器,由此具有如下

    • 禁用鍵盤調整該按鈕攔截所有鼠標點擊。

    我有一個版本,我根本不使用ToggleButton,只處理GridSplitter上的雙擊事件,但問題是我找不到禁用鼠標拖動的方法功能。

  • +0

    您爲什麼使用gridsplitter? – dnr3

    +0

    爲什麼在不使用默認行爲的情況下使用GridSplitter?帶有ToggleButton的擴展器應該足夠了。 –

    +0

    我有一個網格的應用程序,其中列0是NavigationPanel,列1是分離器,列2是MainContentPanel。這個想法是,你應該能夠將NavPanel摺疊到只顯示圖標的最小尺寸(即不完全隱藏它)。我沒有嘗試使用擴展器,因爲我認爲這會擴展或摺疊我不想要的整個面板。 – nrjohnstone

    回答

    0

    我發現的另一種方法是爲DragDeltaEvent添加一個處理程序,然後將其標記爲已處理。

    public class ExtendedGridSplitter : GridSplitter 
    { 
    ... 
        public ExtendedGridSplitter() 
        { 
         EventManager.RegisterClassHandler(typeof(ExtendedGridSplitter), Thumb.DragDeltaEvent, 
          new DragDeltaEventHandler(OnDragDelta)); 
        } 
    
    ... 
        private void OnDragDelta(object sender, DragDeltaEventArgs e) 
        {   
         e.Handled = true;   
        } 
    } 
    

    而且對於鍵盤事件重寫處理程序的工作方式類似於

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
        e.Handled = true; 
    } 
    
    +0

    這似乎不起作用,至少當所有列都不使用「*」大小時。我正在嘗試自己進行計算,因爲在WPF中調整了大小錯誤。 – NathanAldenSr

    0

    老實說,我不明白你爲什麼會想這樣做,但如果你真的要禁用鼠標和鍵盤輸入,只需將IsEnabled設置爲false即可。正如您已經發現的那樣,如果您只想禁用鍵盤輸入,請將Focusable設置爲false-這是將此處帶給我的原因,試圖弄清楚:)