更改现有主题的样式(AvalonDock)

本文关键字:样式 AvalonDock | 更新日期: 2023-09-27 18:20:58

我想更改AvalonDock的Metro主题颜色。我还在Codeplex上问了一个相关的问题,但到目前为止我还没有得到答案。

我确定了以下XAML(源文件)作为我想更改颜色的部分:

<Style TargetType="avalonDockControls:AnchorablePaneTitle">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
      ...
        <ControlTemplate.Triggers>
        ...
        <DataTrigger Binding="{Binding Model.IsActive, RelativeSource={RelativeSource Mode=Self}}" Value="True">
          <!-- following XAML line -->
          <Setter Property="BorderBrush" Value="{DynamicResource AvalonDock_ThemeMetro_BaseColor3}" />
          <Setter Property="BorderThickness" Value="0,3,0,0"/>
        </DataTrigger>
        ...
        </ControlTemplate.Triggers>
    ...

您可以看到:笔刷获得BaseColor3(默认情况下为蓝色)。

现在我更改了XAML中的颜色:

<Window.Resources>
  ...
  <SolidColorBrush x:Key="AvalonDock_ThemeMetroBaseColor3" Color="Red" />
</Window.Resources>

没有什么变化。颜色保持蓝色。现在我很困惑。所以它一定是错误的属性改变了,或者有什么东西阻止了颜色的改变,或者/和内部它使用了旧值或其他东西。。。

为什么它不起作用?如何发现并解决此类问题?

更改现有主题的样式(AvalonDock)

我想问题是:

<avalon:DockingManager>
  <avalon:DockingManager.Theme>
    <avalon:MetroTheme />
  </avalon:DockingManager.Theme>
  ...
</avalon:DockingManager>

我删除了主题设置并创建了自己的资源字典(从AvalonDock源代码中复制了样式)。我不得不修复一些错误:

  • 未找到BaseColorXX->从旧AvalonDock版本的VS2010主题复制
  • TargetType"HwndHostInstance"与元素的类型"LayoutAutoHideWindowControl->注释掉Style with x:Key="{x:type avalonDockControls:LayoutAutoHidWindowControl}")
  • 删除BasedOn="{Static Resource {x:Type MenuItem}}"(导致错误)
  • 使用复制的图像将图像路径更改为我自己的项目路径

在那之后,它起了作用。

解决方案似乎是将SolidColorBrush添加到xaml文件中的DockingManager资源中。

        <avalonDock:DockingManager Grid.Row="1" x:Name="DockingManager">
        <avalonDock:DockingManager.Resources>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor1" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor3" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor4" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor5" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor8" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor9" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor10" Color="Red"/>
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor11" Color="Red" />
            <SolidColorBrush x:Key="AvalonDock_Expression_BaseColor13" Color="Red"/>
        </avalonDock:DockingManager.Resources>
        <avalonDock:DockingManager.Theme>
            <avalonDock:ExpressionDarkTheme/>
        </avalonDock:DockingManager.Theme>