假设我有这样一个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 "等)必须保持不变。所有其他面板("面板02","面板03 "等)必须保持不变。我找到的所有样本都是改变整个主题,但我只需要改变一个LayoutDocument元素。
你需要使用 DataTemplates
, TemplateSelector
或 Converters
你需要给他们一些东西,可以在你想改变的项目和你不想改变的项目之间进行区别。
A WPF转换器 例如,可以使用标题(如果它在你的应用程序中是唯一的)来为每个文档返回一个相应的样式。但这将是一个非常糟糕的实现--在类中使用一个枚举属性来使这个更强大。
一个更好的解决方案是在类中使用 TemplateSelector
基于你的文档viewmodel上的继承类的类层次结构--但这比较复杂--但有一些例子可以看。这里有一个对LayoutAnchorables做同样处理的例子:.
你可以简单地改变 Style
的 LayoutDocument
添加 DataTrigger
这将基于您的ViewModel上设置的一个属性来改变背景颜色。
该属性应该设置为 true
(如果背后的逻辑是二进制的,但如果需要的话,应该更复杂)只是在你的ViewModel上。MainPanel
.
请看一下 Theme.xaml
的 AvalonDock
并搜索 <Style TargetType="{x:Type avalonDockControls:LayoutDocumentTabItem}">
. 在该样式中,你可以很容易地访问绑定到任何一个ViewModel。TabItem
只需进入 {Binding LayoutItem.Model.<my_property>