2009-08-10 91 views
18

我正在編寫一個WPF應用程序,我希望我的一些超鏈接成爲默認藍色,其他成爲綠色。沒問題 - 我可以只設置Foreground在不丟失懸停顏色的情況下更改超鏈接前景

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

麻煩的是,當我這樣做,懸停效果會消失。在正常的超鏈接中,當我將鼠標移動到鏈接上時,它會變成紅色,當我將鼠標移開時,它會回到藍色。但是在指定了前景屬性的超鏈接中,它始終是那種顏色 - 紅色懸停被完全抑制。

如何更改超鏈接的顏色,而不會丟失默認的懸停行爲和顏色?

回答

32

直接設置前景(如您所做的)不起作用,並將其設置爲樣式也不起作用除非您從默認的超鏈接樣式中「派生」該樣式(其中必須包含OnMouseOver觸發器)。所以這個工程:

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

提取該樣式回窗口資源,並用鑰匙將可能使更多的可讀XAML引用它,但上面的代碼做這項工作。

+0

確實如此 - 我嘗試過類似的東西,但是遺漏了BasedOn。謝謝! – 2009-08-10 02:40:50

+12

大聲笑我剛剛在Google上找到了這個答案,試圖解決同樣的問題。如果可以的話,我會投票自己! :) – 2010-02-16 06:28:22

+0

我在沒有任何setter的情況下使用了Style標籤,在這種情況下,Hyperlink似乎沒有考慮它在我爲其合併的單獨的資源字典文件中定義的默認樣式。非常奇怪... – sergiol 2011-11-14 10:58:12