2014-09-08 16 views
5

Chcę zmienić kolor motywu Metro w AvalonDock. Zapytałem także: a related question on Codeplex, ale jak dotąd nie otrzymałem odpowiedzi.Zmień styl istniejącego motywu (AvalonDock)

I zidentyfikowano następujące XAML (source file) jako sztukę, która, jak sądzę, jest odpowiedzialna za kolor chcę zmienić:

<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> 

    ... 

można zobaczyć: szczotka dostaje BaseColor3 (niebieskawy kolor domyślnie).

Teraz zmieniła kolor takiego w moim XAML:

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

Nic się nie zmienia. Kolor pozostaje niebieskawy. Teraz jestem zmieszany. Tak więc musi to być niewłaściwa właściwość do zmiany lub coś uniemożliwia zmianę koloru lub/i wewnętrzna używa starej wartości lub czegoś ...

Dlaczego to nie działa? Jak mogę odkryć takie problemy i je naprawić?

Odpowiedz

7

Myślę, że problemem było to:

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

    ... 

</avalon:DockingManager> 

usunąłem ustawienie motywu i stworzył własnego słownika zasobu (skopiowany styl od źródła AvalonDock). Musiałem naprawić niektóre błędy:

  • BaseColorXX nie znaleziono -> kopia z VS2010 temat starszej wersji AvalonDock
  • TargetType „HwndHostInstance” nie pasuje do typu elementu „LayoutAutoHideWindowControl -> zakomentuj stylu z X : Key = "{x: Type avalonDockControls: LayoutAutoHideWindowControl}")
  • Usuń BasedOn="{Static Resource {x:Type MenuItem}}" (spowodował błąd)
  • Zmiana ścieżek obrazów do własnej ścieżki projektu z kopiowanych obrazów

Po tym zadziałało.

+0

Czy skopiowałeś [theme.xaml] (https://avalondock.codeplex.com/SourceControl/latest#Version2.0/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml)? Patrzę na to i używa kilku "BaseColorXX", które nie istnieją nawet w [brushes.xaml] (https://avalondock.codeplex.com/SourceControl/latest#Version2.0/Xceed.Wpf.AvalonDock .Themes.Metro/Brushes.xaml), jak to możliwe? – JobaDiniz

+0

@JobaDiniz Próbowałem skopiować wszystko, dołączono Theme.xaml. Musiałem dodać kilka definicji 'BaseColorXX' do Brushes.xaml. Skopiowałem je ze starszego Brushes.xaml ze źródła. Na przykład [this] (https://avalondock.codeplex.com/SourceControl/changeset/89595#Version2.0/AvalonDock/AvalonDock.Theme.VS2010/Brushes.xaml) było pierwszym commitem Brushes.xaml i zawierało wszystkie potrzebne definicje. – fedab

+0

Dzięki, ale zmieniłeś ich wartości, prawda? Na przykład 'BaseColor31' (z twojego linku) jest żółtawy, co nie pasuje do stylu metra. – JobaDiniz

Powiązane problemy