2014-03-07 221 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-这是将此处带给我的原因,试图弄清楚:)