Создание стиля тени в XAML

Я немного борюсь с синтаксисом XAML, надеюсь, кто-нибудь может посоветовать. Я хочу создать ресурс стиля типа «Эффект», который содержит определение DropShadowEffect, которое можно использовать повторно, а не всегда вручную устанавливать свойства. Вот что у меня есть:

<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». Любые идеи?


person Troy Hunt    schedule 14.08.2009    source источник


Ответы (1)


Вы не можете «стилизовать» эффект, потому что стиль является свойством элемента управления, а эффект не является элементом управления.

Что вам действительно нужно сделать, так это поместить сам эффект в словарь ресурсов и использовать ссылку 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>
person KeithMahoney    schedule 14.08.2009
comment
Отлично, спасибо Кейт. Вероятно, также стоит упомянуть, что объявление DropShadowEffect должно появиться до того, как на него будет сделана ссылка (в случае, если это не сразу было очевидно!). - person Troy Hunt; 15.08.2009