2009-09-22 17 views
21

Che cosa ho?L'elemento selezionato perde stile quando lo stato attivo si sposta in WBox ListBox

Ho un ListBox popolato con elementi da un file XML. Dato un DynamicResource per Style proprietà e trigger scritto per IsSelected in ItemContainerStyle.

Che cosa voglio fare?

Desidero mantenere evidenziato l'elemento selezionato anche dopo che lo stato attivo è stato spostato dallo ListBox.

Che problema sto affrontando?

Quando si seleziona un elemento, lo stile specificato nel trigger IsSelected funziona. Ma, quando sposto il fuoco fuori dalla lista (premere tab o fare clic su un altro controllo), l'elemento selezionato perde il suo stile. Esiste un modo per mantenere lo stile dell'articolo selezionato?

Grazie in anticipo!

+0

Perché si ripristina la mia modifica? – SLaks

+0

Oops !! è stato per errore. Scusate! – Vijay

+0

Ciao, sto affrontando lo stesso problema e ho provato la soluzione postata ma non riesco a risolvere il problema. Puoi modificare il tuo post in modo che contenga la soluzione? grazie – jpsstavares

risposta

1

Se si sta solo impostando il colore di sfondo, provare a sostituire ControlBrush per il ListBox, come da this answer.

+1

Ok. Fammi provare. Grazie! – Vijay

+1

Questa è una cattiva idea: per gli utenti con i temi visivi disattivati, questo rovinerà un sacco di cose - le barre di scorrimento e i pulsanti cambieranno per diventare il colore di evidenziazione corrente (questo è il blu di default - così il tuo interiore i pulsanti e le barre di scorrimento di ListView diventano blu, molto male!). – BrainSlugs83

28

La risposta a cui si fa riferimento in alcuni casi risolve il problema, ma non è ideale in quanto si interrompe quando il controllo è disabilitato/readonly e sovrascrive anche le combinazioni di colori, piuttosto che sfruttarle. Il mio suggerimento è quello di aggiungere la seguente nei tag ListBox:

<ListBox....> 
    <ListBox.Resources> 
      <Style TargetType="ListBoxItem"> 
       <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="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 

Che cosa questo farà è impostare il colore di sfondo Evidenzia sulla voce casella di riepilogo ogni volta che si seleziona (indipendentemente dallo stato di controllo).

La mia risposta si basa sull'aiuto dalle risposte già date a queste risposte, insieme con il seguente blog: http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx

+0

questo approccio funziona bene. Grazie! –

+0

Questa dovrebbe essere la risposta accettata. – Rich

Problemi correlati