如何使用AvalonDock选择选项卡

时间:2016-09-08 16:25:49

标签: wpf avalondock

我试图在AvalonDock中选择制表符(在LayoutDocumentPaneGroup和LayoutAnchorablePane中)。这似乎应该是一项简单的任务,但我很难找到有关该主题的任何文档。到目前为止,我所获得的最好的是能够选择初始选项卡(见下文),但在初始加载后更改绑定属性时,此绑定似乎不会持久。

    <dock:DockingManager Name="DockingManager" Grid.Row="2" 
                         AnchorablesSource="{Binding Anchorables}" 
                         DocumentsSource="{Binding Documents}" 
                         DocumentClosed="DockingManager_DocumentClosed"
                         DocumentClosing="DockingManager_DocumentClosing"
                         Loaded="DockingManager_Loaded" 
                         MouseUp="DockingManager_MouseUp">
        <dock:DockingManager.LayoutItemContainerStyle>
            <Style TargetType="{x:Type dockctrl:LayoutItem}" >
                <Setter Property="Title" Value="{Binding Model.Title}" />
                <Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}" />
                <Setter Property="CanClose" Value="{Binding Model.CanClose}" />
                <Setter Property="IsSelected" Value="False" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Model.Title}" Value="Resources">
                        <Setter Property="IsSelected" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </dock:DockingManager.LayoutItemContainerStyle>

        <dock:LayoutRoot>
            <dock:LayoutPanel Orientation="Horizontal">

                <dock:LayoutAnchorablePaneGroup x:Name="leftAnchorableGroup" DockWidth="300" >
                    <dock:LayoutAnchorablePane  />
                </dock:LayoutAnchorablePaneGroup>

                <dock:LayoutPanel Orientation="Vertical">
                    <dock:LayoutPanel Orientation="Horizontal">
                        <dock:LayoutDocumentPaneGroup x:Name="leftDocumentGroup">
                            <dock:LayoutDocumentPane />
                        </dock:LayoutDocumentPaneGroup>
                    </dock:LayoutPanel>
                </dock:LayoutPanel>

            </dock:LayoutPanel>
        </dock:LayoutRoot>
    </dock:DockingManager>

但是,如果我替换这些行:

<Setter Property="IsSelected" Value="False" />
<Style.Triggers>
    <DataTrigger Binding="{Binding Model.Title}" Value="Resources">
        <Setter Property="IsSelected" Value="True" />
    </DataTrigger>
</Style.Triggers>

使用:

<Setter Property="IsSelected" Value="{Binding Model.ContentIsSelected" />

...当我更改 ContentIsSelected 的值时,它不起作用。我可以看到(使用Snoop) ContentIsSelected 本身的值我实际上正在改变但 IsSelected 不会随之改变吗?!

我还发现了另一个问题(这导致我尝试使用IsSelected的路径):How to switch between document tabs in AvalonDock 2但是并不完全确定如何以编程方式访问 LayoutItems 超出XAML中的绑定。我尝试了 DockingManager.GetLayoutItemFromModel()函数,但无法返回除NULL以外的任何内容。

如何选择标签并将其置于视图/焦点中(就像我用鼠标点击标签一样)?

1 个答案:

答案 0 :(得分:2)

最终解决方案是默认绑定不符合预期。

<Setter Property="IsSelected" Value="{Binding Model.ContentIsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />