Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Troy HuntОтветов: 1

Я немного борюсь с синтаксисом 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". Любые идеи?

xamlcoding-stylesilverlight

Ответы

Ответ 1 · рейтинг 28 · KeithMahoney

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

Что вам действительно нужно сделать, так это поместить сам эффект в словарь ресурсов и использовать ссылку 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>

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы