2009-09-22 11 views
21

Co mam?Wybrany element traci styl, gdy fokus został przeniesiony do WPF ListBox

Mam ListBox wypełniony przedmiotami z pliku XML. Biorąc pod uwagę DynamicResource dla Style właściwość i pisemne wyzwalacz dla IsSelected w ItemContainerStyle.

Co chcę zrobić?

Chcę, aby zaznaczona pozycja była podświetlona nawet po ustawieniu ostrości poza obszarem ListBox.

Z jakim problemem mam do czynienia?

Po wybraniu elementu działa tryb określony w wyzwalaczu IsSelected. Ale kiedy przeniesię fokus z pola listy (naciśnij kartę lub kliknij inną kontrolkę), wybrany element traci swój styl. Czy jest jakiś sposób, aby zachować styl wybrany przedmiot?

Z góry dziękuję!

+0

Dlaczego odwracania mój zmienił? – SLaks

+0

Ups! to było przez pomyłkę. Przepraszam! – Vijay

+0

Witaj, mam do czynienia z tym samym problemem i wypróbowałem rozwiązanie opublikowane, ale nie mogę rozwiązać problemu. Czy możesz edytować swój post, aby zawierał rozwiązanie? dzięki – jpsstavares

Odpowiedz

1

Jeśli ustawiasz tylko kolor tła, spróbuj zastąpić ControlBrush dla ListBox, zgodnie z this answer.

+1

Ok. Daj mi spróbować. Dzięki! – Vijay

+1

To jest zły pomysł - dla użytkowników z wyłączoną grafiką, będzie to zepsuć wiele rzeczy - paski przewijania i przyciski zmienią się, aby stać się bieżącym kolorem podświetlenia (domyślnie jest to niebieski - więc twój wewnętrzny przyciski i paski przewijania ListView zmieniają kolor na niebieski, bardzo zły!). – BrainSlugs83

28

W niektórych przypadkach rozwiązana odpowiedź rozwiąże problem, ale nie jest idealna, ponieważ zrywa się, gdy kontrola jest wyłączona/tylko do odczytu, a także zastępuje schematy kolorów, zamiast korzystać z nich. Moja sugestia jest dodanie następujących tagów 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> 

Co to będzie zrobić, to ustawić kolor podświetlenia tła na polu elementu listy, gdy jest on wybrany (niezależnie od stanu sterowania).

Moja odpowiedź opiera się na pomoc z odpowiedzi już podanych do tych odpowiedzi, wraz z następującym blogu: http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx

+0

to podejście działa dobrze. dzięki! –

+0

To powinna być zaakceptowana odpowiedź. – Rich

Powiązane problemy