2013-09-07 3 views
2

현재 AvalonDock2를 사용하여 간단한 UI를 작성 중입니다. 정확하게 이해하면 LayoutItemTemplate을 사용하여 모든 문서와 좌상 수에 대한 템플릿을 설정할 수 있습니다.AvalonDock2 : 문서 전용 LayoutItemTemplate

여기 내 문제가 있습니다. "하드 코딩 된"앵커 템플릿을 갖고 싶습니다. 이 템플릿 세트를 가지고하는 것이 합리적이다, 그 문서의 경우

DocumentsSource="{Binding Path=Editor.EditingModelObjects}" 

를 통해

다른 측면에서
<avalonDock:LayoutAnchorable Title="Dialogs" 
          CanClose="False" 
          CanHide="False" 
          CanFloat="False"> 
    <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsDialogs}"/> 
</avalonDock:LayoutAnchorable> 

, 내 중앙 문서 창은 공급되는 문서를, 그래서 : Anchorables 모두는 다음과 같이 은 ContentControl을 사용하고 이제 문제는 LayoutItemTemplate을 설정하면 hardco을 무시하고, 너무

<Style x:Key="DocumentStyle" TargetType="ContentControl"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Type}" Value="{x:Static Member=integratorCore:ModelObjectType.Npc}"> 
      <DataTrigger.Setters> 
       <Setter Property="Template" Value="{StaticResource ResourceKey=NpcViewTemplate}"/> 
      </DataTrigger.Setters> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=Type}" Value="{x:Static Member=integratorCore:ModelObjectType.Room}"> 
      <DataTrigger.Setters> 
       <Setter Property="Template" Value="{StaticResource ResourceKey=RoomViewTemplate}"/> 
      </DataTrigger.Setters> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=Type}" Value="{x:Static Member=integratorCore:ModelObjectType.Dialog}"> 
      <DataTrigger.Setters> 
       <Setter Property="Template" Value="{StaticResource ResourceKey=DialogViewTemplate}"/> 
      </DataTrigger.Setters> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

같은 적절한 스타일을 선택할 수 있습니다 내 앵커리지에 대한 헌신적 인 컨텐츠 ...

어떻게 앵커 클립과 템플리트 문서를 모두 하드 코딩 할 수 있습니까? 이전 AvalonDock 버전과 마찬가지로 또는 새 버전에서 올바르게 처리해야합니까?

여기에 전체 DockingManager입니다 :

<avalonDock:DockingManager x:Name="dockingManager" 
          Grid.Row="2" 
          DocumentsSource="{Binding Path=Editor.EditingModelObjects}" 
          DocumentClosing="DockingManagerDocumentClosing"> 

    <avalonDock:DockingManager.Theme> 
     <avalonDock:ExpressionDarkTheme/> 
    </avalonDock:DockingManager.Theme> 

    <!--<avalonDock:DockingManager.LayoutItemTemplate> 
     <DataTemplate> 
      <ContentControl Style="{StaticResource LayoutItemStyle}" /> 
     </DataTemplate> 
    </avalonDock:DockingManager.LayoutItemTemplate>--> 

    <avalonDock:DockingManager.DocumentHeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Content.Type.Name}"/> 
     </DataTemplate> 
    </avalonDock:DockingManager.DocumentHeaderTemplate> 

    <avalonDock:LayoutRoot> 
     <avalonDock:LayoutPanel Orientation="Horizontal"> 
      <avalonDock:LayoutAnchorablePane DockWidth="350"> 
       <avalonDock:LayoutAnchorable Title="Dialogs" CanClose="False" CanHide="False" CanFloat="False"> 
        <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsDialogs}"/> 
       </avalonDock:LayoutAnchorable> 
       <avalonDock:LayoutAnchorable Title="NPCs" CanClose="False" CanHide="False" CanFloat="False"> 
        <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsNpcs}"/> 
       </avalonDock:LayoutAnchorable> 
       <avalonDock:LayoutAnchorable Title="Rooms" CanClose="False" CanHide="False" CanFloat="False"> 
        <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsRooms}"/> 
       </avalonDock:LayoutAnchorable> 
       <avalonDock:LayoutAnchorable Title="TileSet" CanClose="False" CanHide="False" CanFloat="False"> 
        <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsTileSets}"/> 
       </avalonDock:LayoutAnchorable> 
       <avalonDock:LayoutAnchorable Title="Zones" CanClose="False" CanHide="False" CanFloat="False"> 
        <integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsZones}"/> 
       </avalonDock:LayoutAnchorable> 
      </avalonDock:LayoutAnchorablePane> 

      <avalonDock:LayoutDocumentPane x:Name="documentPane"> 
      </avalonDock:LayoutDocumentPane> 

      <avalonDock:LayoutAnchorablePane DockWidth="300"> 
       <avalonDock:LayoutAnchorable Title="Context" 
              CanClose="False" 
              CanHide="False" 
              CanFloat="False"> 
        <TextBox/> 
       </avalonDock:LayoutAnchorable> 
      </avalonDock:LayoutAnchorablePane> 

     </avalonDock:LayoutPanel> 

     <avalonDock:LayoutRoot.BottomSide> 
      <avalonDock:LayoutAnchorSide> 
       <avalonDock:LayoutAnchorGroup> 

        <avalonDock:LayoutAnchorable Title="Console" 
               CanClose="False" 
               CanHide="False" 
               CanFloat="False"> 
         <TextBlock Text="Test"/> 
        </avalonDock:LayoutAnchorable> 

        <avalonDock:LayoutAnchorable Title="Error List" 
               CanClose="False" 
               CanHide="False" 
               CanFloat="False"> 
         <TextBlock Text="Test"/> 
        </avalonDock:LayoutAnchorable> 

       </avalonDock:LayoutAnchorGroup> 
      </avalonDock:LayoutAnchorSide> 
     </avalonDock:LayoutRoot.BottomSide> 

    </avalonDock:LayoutRoot> 
</avalonDock:DockingManager> 

답변

4

당신은 문서, Anchorable 또는 문서 또는 Anchorable 심지어 특정 유형에 따라 선택 적절한 템플릿을 위해 LayoutItemTemplateSelector를 사용하는 것이 좋습니다.

이 예제는 AvalonDock Source Code의 MVVMTestApp에서 가져온 것입니다.

당신은 AnchorableTemplate

내가 사용하는 결국 무엇
<avalonDock:DockingManager.LayoutItemTemplateSelector> 
    <local:PanesTemplateSelector> 
     <local:PanesTemplateSelector.FileViewTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding TextContent, UpdateSourceTrigger=PropertyChanged}"/> 
      </DataTemplate> 
     </local:PanesTemplateSelector.FileViewTemplate> 
     <local:PanesTemplateSelector.FileStatsViewTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding FileSize}"/> 
        <TextBlock Text="{Binding LastModified}"/> 
        <TextBox Text="test"/> 
       </StackPanel> 
      </DataTemplate> 
     </local:PanesTemplateSelector.FileStatsViewTemplate> 
    </local:PanesTemplateSelector> 
</avalonDock:DockingManager.LayoutItemTemplateSelector> 
+0

에 대한 DocumentTemplate 및 FileStatsViewTemplate에 대한 FileViewTemplate를 상호 교환하여 원하는 결과를 얻을 수 있지만, 그것을 할 수있는 좋은 방법을 지적하는 당신에게 소품을 줄 것이다. – NGauthier