2009-08-10 16 views
18

Piszę aplikację WPF i chcę, aby niektóre z moich hiperłączy były domyślnie niebieskie, a inne zielone. Nie ma problemu - można po prostu ustawić Foreground:Zmiana pierwszego planu hiperłącza bez utraty koloru hover

<TextBlock><Hyperlink Foreground="#0C0">Mark as done</Hyperlink></TextBlock> 

Kłopot w tym, kiedy to zrobić, efekt aktywowania odchodzi. W normalnym hiperłączu, gdy przesuję mysz nad linkiem, zmienia kolor na czerwony, a kiedy odsuń mysz, wraca do niebieskiego. Ale w hiperłączu z przypisaną właściwością pierwszego planu zawsze jest ten kolor - czerwony na zawisie jest całkowicie stłumiony.

Jak zmienić kolor hiperłącza bez utraty domyślnego zachowania i koloru?

Odpowiedz

32

Bezpośrednie ustawienie pierwszego planu (tak jak to robisz) nie działa, a ustawienie go w stylu również nie działa, , chyba że "wyprowadzasz" ten styl z domyślnego stylu hiperłącza (który musi zawierać wyzwalacz OnMouseOver). Tak to działa:

<TextBlock> 
    <Hyperlink> 
     <Hyperlink.Style> 
      <Style TargetType="Hyperlink" 
        BasedOn="{StaticResource {x:Type Hyperlink}}"> 
       <Setter Property="Foreground" Value="#0C0"/> 
      </Style> 
     </Hyperlink.Style> 
     Mark as done 
    </Hyperlink> 
</TextBlock> 

Wyciąganie tego stylu z powrotem do zasobów okno i przedstawieniu go z kluczem prawdopodobnie uczynić dla bardziej czytelnej XAML, ale powyższy kod spełnia swoje zadanie.

+0

Rzeczywiście tak - próbowałem czegoś podobnego, ale brakowało narzędzia BasedOn. Dzięki! –

+12

lol Właśnie znalazłem tę odpowiedź w Google, próbując rozwiązać ten sam problem. Chciałbym głosować na siebie, gdybym mógł! :) –

+0

Użyłem tego ze znacznikiem Style bez żadnych ustawiaczy w sytuacji, w której Hiperłącze wydaje się nie uwzględniać własnego domyślnego stylu zdefiniowanego dla niego w oddzielnym pliku Słownika zasobów, który scaliłem. Bardzo dziwne ... – sergiol

Powiązane problemy