2016-09-08 5 views
1

Я пытаюсь выбрать вкладки (оба в LayoutDocumentPaneGroup и LayoutAnchorablePane) в AvalonDock. Кажется, что это должна быть легкая задача, но я изо всех сил пытаюсь найти документацию по этому вопросу. Пока лучшее, что я получил, это возможность выбрать начальную вкладку (см. Ниже), но эта привязка, похоже, не сохраняется при изменении связанного свойства после начальной загрузки.Как выбрать вкладки с AvalonDock

<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

Решение оказалось, что привязка по умолчанию не была такой, как ожидалось.

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