在Avalon Dock中,如何以编程方式隐藏LayoutDocumentPane项并还原它们

时间:2018-10-18 08:01:27

标签: c# wpf mvvm devexpress avalondock

我在上下文菜单上使用devexpress,试图隐藏RootPanel中存在的许多LayoutDocument之一。

下面是documentpane xml文件。

  <LayoutDocumentPane>
        <LayoutDocument Title="  View  " IsSelected="True" ContentId="view" CanClose="False" LastActivationTimeStamp="10/15/2018 12:17:44" />
      </LayoutDocumentPane>

下面是Xaml代码

  <xcad:LayoutDocument Title="  View  "  CanClose="False"  ContentId="View"  >
        <dxg:GridControl Name="dataTable" EnableSmartColumnsGeneration="True" 
                         ItemsSource="{Binding View_InfoTable,Mode=TwoWay,NotifyOnSourceUpdated=True,NotifyOnTargetUpdated=True}" SelectionMode="Row" 
                         AutoGenerateColumns="AddNew"  AllowColumnMRUFilterList="True"  ShowAllTableValuesInFilterPopup="False">
            <dxg:GridControl.View>
                <dxg:TableView ShowAutoFilterRow="True"  UseGroupShadowIndent="False" ShowGroupPanel="False" ShowCriteriaInAutoFilterRow="True" AllowSorting="False" BestFitMode="VisibleRows" 
                               ShowFixedTotalSummary="False" >
                </dxg:TableView>
            </dxg:GridControl.View>
        </dxg:GridControl>
 </xcad:LayoutDocument>

经过大量调试和搜索后,我没有任何解决方案,如何隐藏停靠面板并单击某些按钮来还原它们。

2 个答案:

答案 0 :(得分:0)

您可以切换Visibility的{​​{1}}属性

LayoutDocumentPane

这就是我用MVVM实现的方式。

检查我为文件样式和工具箱样式提供的样式是否都绑定了可见性属性,以便我们可以使用ViewModel来切换可见性。

<Style TargetType="{x:Type xcad:LayoutItem}">
    <Setter Property="Visibility" Value="{Binding Model.IsVisible, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}" />
</Style>

答案 1 :(得分:0)

尝试了许多天的尝试错误后,我找到了一种方法。

 private void BarButtonItem_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
     {
     string currentDockPane = e.Item.Content.ToString();       
      switch (currentDockPane)
          {
            case "view":
           var currentLayout= StandardDockManager.Layout.Descendents().OfType<LayoutAnchorable>().Where(x => x.ContentId == "view").FirstOrDefault();
     //Get all the descendents of current dock manger and check for the LayoutAnchorable if its visible .
                if (currentLayout.IsVisible)
               (((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable)(currentLayout))).IsVisible = false;
                             else
               (((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable)(currentLayout))).IsVisible = true;
            break;
              .......................
        }
    }