NGa*_*ier 3 c# wpf xaml avalondock
我目前正在使用AvalonDock2构建一个简单的UI。如果我正确理解,则可以使用LayoutItemTemplate为所有文档和可打印对象设置模板。
现在这是我的问题:我想拥有“硬编码”可锚定模板。所有可锚定对象如下所示:
<avalonDock:LayoutAnchorable Title="Dialogs"
CanClose="False"
CanHide="False"
CanFloat="False">
<integratorUI:Explorer DataContext="{Binding Path=Editor.ModelsDialogs}"/>
</avalonDock:LayoutAnchorable>
Run Code Online (Sandbox Code Playgroud)
另一方面,我的中央文档窗格正在通过
DocumentsSource="{Binding Path=Editor.EditingModelObjects}"
Run Code Online (Sandbox Code Playgroud)
对于那些文档,设置模板很有意义,因此我可以使用ContentControl并选择适当的样式,如下所示
<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>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,设置LayoutItemTemplate会覆盖我的锚点的硬编码内容...
我怎样才能同时对固定锚和模板化文档进行硬编码?就像在旧的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>
Run Code Online (Sandbox Code Playgroud)
您将要使用LayoutItemTemplateSelector来基于Document,Anchorable甚至是特定类型的Document或Anchorable选择适当的模板。
本示例来自AvalonDock源代码中的MVVMTestApp。
通过将FileViewTemplate替换为DocumentTemplate,将FileStatsViewTemplate替换为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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3529 次 |
| 最近记录: |