2009-08-14 149 views
14

我正在努力一些XAML語法,希望有人能提供建議。我想創建一個包含DropShadowEffect定義的「效果」類型樣式資源,該定義可以重複使用,而不是始終手動設置屬性。這是我有什麼:在XAML中創建陰影樣式

<Style TargetType="DropShadowEffect" x:Name="DropShadowEffectStyle"> 
    <Setter Property="BlurRadius" Value="5" /> 
    <Setter Property="Direction" Value="315" /> 
    <Setter Property="ShadowDepth" Value="2" /> 
    <Setter Property="Opacity" Value="0.5" /> 
</Style> 

<Style TargetType="TextBlock" x:Name="PageTabLabelStyle"> 
    <Setter Property="FontSize" Value="16" /> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="Foreground" Value="#EFEFEF" /> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Margin" Value="0, 10, 0, 10" /> 
    <Setter Property="Effect" Value="{StaticResource DropShadowEffectStyle}" /> 
</Style> 

這每次失敗慘敗,所以我顯然失去了一些東西。我認爲它圍繞着期待「效果」類型而不是「DopShadowEffect」類型的文本塊樣式的「效果」屬性。有任何想法嗎?

回答

28

由於Style是Control的一個屬性,而效果不是Control,所以無法「調整」效果。

你真正想要做的就是將效果本身放入資源字典中,並使用StaticResource引用指向它。例如:

<UserControl.Resources> 
    <DropShadowEffect x:Key="dropShadow" BlurRadius="25" Direction="315" /> 
    <Style TargetType="TextBlock" x:Name="PageTabLabelStyle"> 
     <Setter Property="FontSize" Value="16" /> 
     <Setter Property="FontFamily" Value="Arial" /> 
     <Setter Property="Foreground" Value="#EFEFEF" /> 
     <Setter Property="VerticalAlignment" Value="Center" /> 
     <Setter Property="Margin" Value="0, 10, 0, 10" /> 
     <Setter Property="Effect" Value="{StaticResource dropShadow}" /> 
    </Style> 
</UserControl.Resources> 
+0

完美,謝謝基思。也許值得一提的是,DropShadowEffect聲明必須在被引用之前出現(如果不是立即顯而易見的話)。 – 2009-08-15 07:23:04

+0

我找到了另一種方法[這裏](http://stackoverflow.com/a/5157480/3029422) – Ionut 2015-07-14 19:34:50