4

我在使用 Avalon Docking 时遇到问题,我的第二个面板停靠在底部并设置为 AutoHide。当 UI 运行时,窗格默认加载为停靠/可见。我想让它隐藏/最小化。

<ad:DockingManager>
    <ad:ResizingPanel Orientation="Vertical">
        <ad:DocumentPane>
            <ad:DocumentContent>
                <... data grid that fills the view>
            </ad:DocumentContent>
        <ad:DocumentPane>
       <ad:DockablePane>
            <ad:DockableContent Title="output" DockableStyle="AutoHide" IsCloseable="False">
                <...some control>

我已经尝试过 Avalon 论坛上建议的各种“黑客”,在 OnLoad,你可以

outputDockablePane.ToggleAutoHide();

这很有效,这意味着当加载 UI 时,窗格会被隐藏。但是,一旦您在 .cs 代码中切换自动隐藏,在运行时单击停靠标题以使窗格可见/浮动停止工作。因此,您必须连接 DockingMananger.OnMouseUp() 并解析几个布尔状态并手动调用 ToggleAutoHide() - 我猜只是在时间上。对我来说似乎是一个黑客。

这就是我现在正在做的事情,直到我找到一个合适且干净的解决方案:

    private void OnDockManagerLoaded(object sender, RoutedEventArgs e)
    {
        if(_firstTimeLoad && !_isDataGridLoaded)
        {
                outputDockablePane.ToggleAutoHide();
                _forcedToAutoHide = true;
        }
    }

    private void OnDockingManagerMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (_forcedToAutoHide)
        {
            _forcedToAutoHide = false;

            outputDockableContent.Activate();
            outputDockablePane.ToggleAutoHide();
        }
    }

是否有我完全丢失的设置/属性,或/和更好的方法?

4

1 回答 1

0

4 年仍然 Avalon Docking 有同样的问题。虽然我还没有找到合适的解决方案,但我已经尝试改进你的解决方法逻辑。

private void OnDockingManagerMouseUp(object sender, MouseButtonEventArgs e)
{
     if (outputDockableContent.IsAutoHidden)
     {
        outputDockableContent.IsActive = false;
     }
}
于 2015-08-24T08:21:43.780 回答