2014-09-08 33 views
5

Desidero modificare il colore del tema Metro di AvalonDock. Ho anche chiesto a related question on Codeplex ma non ho avuto una risposta finora.Cambia stile di tema esistente (AvalonDock)

ho individuato le seguenti XAML (source file) come il pezzo che, immagino, è responsabile per il colore che voglio cambiare:

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

    ... 

è possibile vedere: il pennello ottiene il BaseColor3 (un colore bluastro di default).

Ora ho cambiato il colore del genere nel mio XAML:

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

non cambia nulla. Il colore rimane bluastro. Ora sono confuso. Quindi deve essere la proprietà sbagliata da modificare o qualcosa impedisce il cambiamento del colore o/e interno usa il vecchio valore o qualcosa del genere ...

Perché non funziona? Come posso scoprire questi problemi e risolverlo?

risposta

7

Credo che il problema era questo:

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

    ... 

</avalon:DockingManager> 

ho rimosso l'impostazione tema e ha creato un proprio dizionario di risorse (copiato lo stile dalla fonte AvalonDock). Ho dovuto correggere alcuni errori:

  • BaseColorXX non trovato -> copia da VS2010 tema di una versione AvalonDock vecchio
  • TargetType 'HwndHostInstance' non corrisponde con il tipo di elemento "LayoutAutoHideWindowControl -> come commento lo Style con x : Key = "{x: Tipo: avalonDockControls LayoutAutoHideWindowControl}")
  • Rimuovere BasedOn="{Static Resource {x:Type MenuItem}}" (causato un errore)
  • modificare i percorsi di immagine per la mia strada di progetto con le immagini copiate

Dopo che ha funzionato.

+0

Hai copiato [theme.xaml] (https://avalondock.codeplex.com/SourceControl/latest#Version2.0/Xceed.Wpf.AvalonDock.Themes.Metro/Theme.xaml)? L'ho visto e utilizza diversi 'BaseColorXX' che non esistono nemmeno in [brushes.xaml] (https://avalondock.codeplex.com/SourceControl/latest#Version2.0/Xceed.Wpf.AvalonDock .Themes.Metro/Brushes.xaml), come mai? – JobaDiniz

+0

@JobaDiniz Ho provato a copiare tutto, incluso Theme.xaml. Ho dovuto aggiungere alcune definizioni di 'BaseColorXX' a Brushes.xaml. Li ho copiati da un precedente Brushes.xaml dalla sorgente. Ad esempio [questo] (https://avalondock.codeplex.com/SourceControl/changeset/89595#Version2.0/AvalonDock/AvalonDock.Theme.VS2010/Brushes.xaml) è stato il primo impegno di Brushes.xaml e conteneva tutto il necessario definizioni. – fedab

+0

Grazie, ma hai cambiato i loro valori, giusto? Ad esempio, 'BaseColor31' (dal tuo link) è giallastro che non si adatta allo stile metro. – JobaDiniz