Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 最大限度地利用Aero snap-on可停靠的LoatingWindow_Wpf_Aero_Maximize_Avalondock - Fatal编程技术网

Wpf 最大限度地利用Aero snap-on可停靠的LoatingWindow

Wpf 最大限度地利用Aero snap-on可停靠的LoatingWindow,wpf,aero,maximize,avalondock,Wpf,Aero,Maximize,Avalondock,我有以下代码,使未固定的浮动AvalonDock窗口能够最大化: class MaximizableDockableContent : AvalonDock.DockableContent { public MaximizableDockableContent() : base() { base.StateChanged += MaximizableDockableContent_StateChanged; } private

我有以下代码,使未固定的浮动AvalonDock窗口能够最大化:

class MaximizableDockableContent : AvalonDock.DockableContent
{
    public MaximizableDockableContent()
        : base()
    {
         base.StateChanged += MaximizableDockableContent_StateChanged;
    }

    private void MaximizableDockableContent_StateChanged(
        object sender, RoutedEventArgs e)
    {
        MaximizableDockableContent mdc = (MaximizableDockableContent)sender;
        if (mdc.State == DockableContentState.DockableWindow)
        {
            base.FloatingWindowSizeToContent = SizeToContent.WidthAndHeight;
            FloatingDockablePane fdp = (FloatingDockablePane)base.Parent;
            DockableFloatingWindow dfw = (DockableFloatingWindow)fdp.Parent;

            //dfw.WindowState = WindowState.Maximized;
            dfw.WindowStyle = WindowStyle.ThreeDBorderWindow;
            dfw.ResizeMode = ResizeMode.CanResize;

            //disable minimize button
            ControlBox.SetHasMinimizeButton(dfw, false);
        }
    }
}

如何向此添加功能?

您可以使用运行时运行外部进程:

从以下位置下载nircmd.exe: 并确保它与.class文件位于同一目录或windows PATH环境变量中

然后使用Runtime.exec()将其运行几次:

Runtime r=Runtime.getRuntime();
r.exec("nircmd.exe sendkey lwin down");
r.exec("nircmd.exe sendkey "+direction+" press");
//change direction to "right" (for right side), "left" (for left side), or "up" (for full window).
r.exec("nircmd.exe sendkey lwin up");
请注意,这可能引发IOException,因此可能需要try/catch块


注意:这假设窗口是活动窗口。

anon说“不幸的是,也禁用了Windows+向上或向下箭头的最大/最小值。活动窗口。”

vIBIUS说:“这也会禁用Windows键+Shift和左/右选项!”

Kermonk说“不幸的是,这也禁用了“摇晃窗口关闭所有其他窗口”功能……”

试试这个:

[HKEY_CURRENT_USER\Control Panel\Desktop]
"DockMoving"="0"

它禁用鼠标操作以最大化窗口,并将窗口捕捉到一侧,但不使用键盘快捷键。它不影响AeroPeak或AeroShake。它也不会影响“仅在垂直方向上最大化窗口”。

对于感兴趣的用户,最新版本的AvalonDock(版本2)本机支持浮动窗口aero snap功能。 AvalonDock 2.0仍处于测试阶段,更多信息: 新功能:

Snap是由操作系统而不是Windows实现的功能。您可能想继续编辑或从DockingManager派生。重要的类似乎是“WindowInteropWrapper.cs”。我希望有人能指出aero snap的要点。您希望它能够捕捉到整个屏幕还是仅仅是一个DockingManager?我希望能够aero将(未固定的浮动)可停靠内容捕捉到整个屏幕的边缘,就像visual studio 2010一样。(例如,捕捉到顶部边缘可以最大化;捕捉到右端左侧边缘可以填充屏幕的一半。)提前感谢。VS2010中每个未固定的浮动面板都是一个操作系统窗口;因此,它可以捕捉的原因是操作系统检测到窗口并执行其操作。默认情况下,Windows 7应具有此功能。如果您希望在其他操作系统中也发生这种情况,那么您可能希望开始在DockingManager中查找以下方法:IDropSurface.OnDragEnter,Drag(FloatingWindow,Point,Point)。