2011-11-02 3 views
1

J'ai une zone de liste dont la couleur de sélection est par défaut couleur Uni Uni. J'ai lu cet article "Comment changer WPF ListBox SelectedItem Color?" here. Je veux créer un style donné pour le code derrière. afin que je puisse assigner ce style à ma propriété Listbox ItemContainerStyle.Convertir le style XAML en code derrière le style?

comme

s style = ......

MyListBox.ItemContainerStyle = S;

Je veux faire ceci dans le code parce que si l'utilisateur change le thème de mon logiciel alors ce style (couleurs de sélection) devrait se recréer pour correspondre aux couleurs changées de thème.

<Style x:Key="SimpleListBoxItem" TargetType="ListBoxItem"> 
<Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListBoxItem"> 
     <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> 
      <ContentPresenter /> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="{StaticResource AuthorGradient}"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

Qu'avez-vous essayé et quels problèmes vous en cours d'exécution? Veuillez modifier la question pour ajouter cette information, y compris les exemples de code que vous avez (même s'ils sont cassés). –

+0

@ MerlynMorgan-Graham: J'ai édité ma question S'il vous plaît regarder maintenant. –

+0

Voici une question en double: http://stackoverflow.com/questions/1729368/creating-a-style-in-code-behind - Commencez avec cet exemple, et laissez Intellisense vous aider avec le reste. –

Répondre

4

Je pense que vous ne disposez pas d'un code derrière la version de ce code, il vous suffit de vous appliquer êtes modèle existant à votre zone de liste comme ci-dessous.

si votre cible est un modèle.

(NameOfListBox.SelectedItem as ListBoxItem).ContentTemplate = this.Resources["NameOfTemplate"] as DataTempate; 
(NameOfListBox.SelectedItem as ListBoxItem).UpdateLayout(); 

si votre cible est un style.

(NameOfListBox.SelectedItem as ListBoxItem).Style= this.Resources["NameOfStyle"] as DataTempate; 
(NameOfListBox.SelectedItem as ListBoxItem).UpdateLayout(); 

exemple

(lstMetaDataCards.SelectedItem as ListBoxItem).ContentTemplate = this.Resources["MetaDataCardAtEditState"] as DataTemplate; 
(lstMetaDataCards.SelectedItem as ListBoxItem).UpdateLayout(); 
Questions connexes