2009-08-14 4 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, и эффект не является элементом управления.

Что вы действительно хотите сделать, это поместить эффект в словарь ресурсов и использовать ссылку 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 должно появиться до того, как оно будет указано (в случае, если это не было сразу очевидно!). –

+0

Я нашел другой способ сделать это [здесь] (http://stackoverflow.com/a/5157480/3029422) – Ionut

Смежные вопросы