如何更改单个布局文档的样式?



>假设我有这个xaml:

<avalonDock:DockingManager>
<avalonDock:LayoutRoot>
<avalonDock:LayoutPanel Orientation="Horizontal">
<avalonDock:LayoutDocumentPaneGroup>
<avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocument Title="Main Panel">
</avalonDock:LayoutDocument>
</avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocument Title="Panel 02">
</avalonDock:LayoutDocument>
</avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocumentPane>
<avalonDock:LayoutDocument Title="Panel 03">
</avalonDock:LayoutDocument>
</avalonDock:LayoutDocumentPane>
<!-- 
Other LayoutDocumentPane's here...
-->
</avalonDock:LayoutDocumentPaneGroup>
</avalonDock:LayoutPanel>
</avalonDock:LayoutRoot>
</avalonDock:DockingManager>

现在我只需要为"主面板"放置不同的样式,例如红色背景。所有其他面板("面板 02"、"面板 03"等(必须保持不变。我找到的所有示例都是为了更改整个主题,但我只需要更改一个 LayoutDocument 元素。

你需要使用DataTemplatesTemplateSelectorConverters,你需要给他们一些东西,在你想要改变的项目和你不想改变的项目之间可以区分

。例如,样式属性上的 WPF 转换器可以使用标题(如果标题在应用中是唯一的(为每个文档返回相应的样式。但这将是一个非常糟糕的实现 - 在类中使用枚举属性来使这个更健壮。

更好的解决方案是使用基于文档视图模型上固有类的类层次结构的TemplateSelector- 但这更复杂 - 但有一些示例可以查看:这是一个对 LayoutAnchorable 执行相同操作的示例。

您只需更改LayoutDocumentStyle添加一个DataTrigger,该将根据 ViewModel 上设置的属性更改背景颜色。

该属性应仅在MainPanel的 ViewModel 上设置为true(如果背后的逻辑是二进制的,但如果需要,应该更复杂(。

请查看AvalonDockTheme.xaml并搜索<Style TargetType="{x:Type avalonDockControls:LayoutDocumentTabItem}">。在该样式中,您只需访问{Binding LayoutItem.Model.<my_property>即可轻松访问绑定到任何TabItem的视图模型

最新更新