如何改变单个LayoutDocument的样式?

问题描述 投票:0回答:1

假设我有这样一个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元素。

c# wpf xaml avalondock
1个回答
1
投票

你需要使用 DataTemplates, TemplateSelectorConverters 你需要给他们一些东西,可以在你想改变的项目和你不想改变的项目之间进行区别。

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

一个更好的解决方案是在类中使用 TemplateSelector 基于你的文档viewmodel上的继承类的类层次结构--但这比较复杂--但有一些例子可以看。这里有一个对LayoutAnchorables做同样处理的例子:.


1
投票

你可以简单地改变 StyleLayoutDocument 添加 DataTrigger 这将基于您的ViewModel上设置的一个属性来改变背景颜色。

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

请看一下 Theme.xamlAvalonDock 并搜索 <Style TargetType="{x:Type avalonDockControls:LayoutDocumentTabItem}">. 在该样式中,你可以很容易地访问绑定到任何一个ViewModel。TabItem 只需进入 {Binding LayoutItem.Model.<my_property>

© www.soinside.com 2019 - 2024. All rights reserved.