26

我有以下代码使未停靠的浮动 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);
        }
    }
}

我该如何为此添加Aero Snap功能?

4

3 回答 3

1

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

从以下网址下载 nircmd.exe:http ://www.nirsoft.net/utils/nircmd.html 并确保它与 .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 块。

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

于 2011-09-13T01:35:40.790 回答
1

anon 说:“不幸的是,Max./Min 也禁用了 Windows + 向上或向下箭头。活动窗口。”</p>

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

Kermonk 说“不幸的是,这也禁用了“摇动窗口以关闭所有其他窗口”功能......”</p>

试试这个:

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

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

于 2011-10-21T19:09:27.223 回答
1

对于有兴趣的人,最新版本的 AvalonDock(第 2 版)原生支持浮动窗口 aero snap 功能。AvalonDock 2.0 仍处于测试阶段,更多信息: http ://avalondock.codeplex.com/ 新功能: http ://avalondock.codeplex.com/wikipage?title=Version2Concept

于 2012-04-02T20:38:25.363 回答