我遇到了Avalon Docking的问题,我的第二个面板停靠在底部并设置为AutoHide。 当UI运行时,默认情况下窗格加载为Docked / Visible。我想隐藏/最小化它。
<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代码中切换自动隐藏,在运行时单击Dock标头以使窗格可见/浮动停止工作。所以你必须连接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();
}
}
是否存在我完全缺失的设置/属性,或/和更好的方式?
答案 0 :(得分:0)
4年仍然Avalon Docking有同样的问题。虽然我还没有找到合适的解决方案,但我试图改进你的解决方法逻辑。
private void OnDockingManagerMouseUp(object sender, MouseButtonEventArgs e)
{
if (outputDockableContent.IsAutoHidden)
{
outputDockableContent.IsActive = false;
}
}