2012-04-12 107 views
4

我遇到Avalon Docking问题,我的第二个面板停靠在底部并设置为AutoHide。 默认情况下,UI将窗格加载为停靠/可见。我想将它隐藏/最小化。Avalon Dock Auto加载时隐藏问题

<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> 

我已经尝试了各种“黑客”在阿瓦隆论坛,在那里的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(); 
     } 
    } 

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

回答

0

4年仍然Avalon停靠有同样的问题。虽然我还没有找到一个合适的解决方案,但我试图改进你的解决方法逻辑。

private void OnDockingManagerMouseUp(object sender, MouseButtonEventArgs e) 
{ 
    if (outputDockableContent.IsAutoHidden) 
    { 
     outputDockableContent.IsActive = false; 
    } 
}