2011-02-01 44 views
1

鑑於以下XAML標記,我希望超鏈接中的文本在我將鼠標移到它上方時變成橙色,因爲我在其父控件上設置了前景色它應該過濾掉Property Value Inheritance。但它保持黑色。我需要做什麼?WPF - 超鏈接風格不會隨着標籤內部樣式的變化而變化

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style x:Key="DemoLink" TargetType="{x:Type Hyperlink}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Foreground" Value="DarkOrange" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Label> 
      <Hyperlink Style="{StaticResource DemoLink}"> 
       <Label Content="Text that should change colour on mouse over" /> 
      </Hyperlink> 
     </Label> 
    </Grid> 
</Window> 


更新:從Meleak簡單的答案是,使用TextBlock的,而不是內標籤會導致如預期的那樣風格的工作 - 將TextBlock拿起從其父前景色,而標籤纔不是。

例如

<Label> 
    <Hyperlink Style="{StaticResource DemoLink}"> 
     <TextBlock Text="Text that does change colour on mouse over" /> 
    </Hyperlink> 
</Label> 

回答

2

似乎Label不受Foreground設置在其父項。即使這沒有任何影響

<Label> 
    <Hyperlink Style="{StaticResource DemoLink}" Foreground="DarkOrange"> 
     <Label Content="This is some text that should change colour on mouse over" /> 
    </Hyperlink> 
</Label> 

更新
設置樣式爲Label,而不是Hyperlink的,它會工作

<Window.Resources> 
    <Style x:Key="DemoLinkLabel" TargetType="Label"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Foreground" Value="DarkOrange" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Label> 
     <Hyperlink Name="DemoHyperlink" > 
      <Label Content="This is some text that should change colour on mouse over" 
        Style="{StaticResource DemoLinkLabel}"/> 
     </Hyperlink> 
    </Label> 
</Grid> 

再次更新
最簡單的方法是使用TextBlock而不是Label,因爲它沒有這個問題

<Hyperlink Name="DemoHyperlink" Style="{StaticResource DemoLink}"> 
    <TextBlock Text="This is some text that should change colour on mouse over"/> 
</Hyperlink> 
0

您已設置超鏈接樣式,而不是標籤。您需要爲標籤設置相同的觸發器,因此它也可以對IsMouseOver事件做出反應。

+0

是的,我設置了超鏈接的樣式,而不是標籤。標籤沒有明確設置前景,所以它應該根據屬性繼承從其父項中獲取該值http://msdn.microsoft.com/en-us/library/ms753197.aspx我希望超鏈接中的所有內容得到那個forground集合。但事實並非如此。 – Anthony 2011-02-01 23:00:01

+1

並非每個依賴屬性都參與價值繼承。超鏈接,我相信是一個沒有。我可以看到你找到了TextBlock的解決方案,但我可以提到更多的方法來做到這一點。你可以寫:<超鏈接樣式=「{StaticResource DemoLink}」> 這是一些文字,應該改變鼠標的顏色 – ShaQ 2011-02-02 11:58:48

相關問題