WPF GridSplitter - 如何禁用鼠标拖动和键盘调整大小

时间:2014-03-07 01:35:46

标签: c# wpf

我已经基于一些博客来源实现了一个网格分割器,它基本上允许基于双击事件进行扩展/折叠。

分割器位于网格的两列之间,表示屏幕布局,左侧是NavigationPanel,右侧是MainContentPanel,分割器允许将NavigationPanel折叠到仅显示图标的最小宽度。

是否有办法在允许拖动分割器和键盘调整时禁用网格分割器的默认行为?

我目前的解决方法如下

  • 通过将Focusable设置为False
  • 来禁用键盘调整
  • 通过将ToggleButton控件置于与GridSplitter相同的位置,防止用户“抓住”拆分器,从而让按钮拦截所有鼠标点击。

我有一个版本,我根本不使用ToggleButton只处理GridSplitter上的双击事件,但问题是我找不到禁用鼠标拖动功能的方法。 / p>

3 个答案:

答案 0 :(得分:1)

老实说,不明白为什么要这样做,但如果你真的想要禁用鼠标和键盘输入,只需将IsEnabled设置为false即可。正如您已经发现的那样,如果您只想禁用键盘输入,请将Focusable设置为false-这就是我带到这里的原因,试图弄明白:)

答案 1 :(得分: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;
}

答案 2 :(得分:0)

一个对我有用的简单解决方案(虽然不是很漂亮)是将 MaxWidth 和 MinWidth 设置为相同的值。在我的情况下,当用户选择关闭窗口并在侧栏中显示“重新出现”图标时,我想关闭拆分器的使用。 不幸的是,MouseWE 抓手仍然亮着,但它们什么也做不了。