Как добавить неразмывую тень к текстовому блоку

В вопросе сказано все. Я не могу понять это. Я попытался добавить зеркальный текстовый элемент, но у меня есть триггер, который изменяет размер шрифта, когда мышь находится над элементом, который не срабатывает из-за того, что основной элемент находится сверху. Обычные обходные пути для размытия не работают, когда вы хотите отбрасывать тень самого текста.

Я думаю взломать это и добавить два теневых текстовых блока, которые переключают видимость. Но я не уверен, как переключить эту видимость, поскольку я не могу использовать TargetName или DataTrigger, поскольку он основан на другом элементе, поэтому он никогда не сработает.

По запросу (тень преувеличена, чтобы ее было видно)введите здесь описание изображения:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:models="clr-namespace:DesktopDictation.Spelling.Models">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="../FontStyles/TextBlock.DefaultFont.xaml"/>
  </ResourceDictionary.MergedDictionaries>
  <DropShadowEffect x:Key="BlackShadow" ShadowDepth="10" Direction="270" Color="Black" Opacity="75" BlurRadius="2"/>
  <Style x:Key="Spelling.TextGlyph" TargetType="TextBlock" BasedOn="{StaticResource TextBlock.DefaultFontFamilyStyle}">
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFFFFF"/>
    <!--<Setter Property="Effect" Value="{StaticResource BlackShadow}"/>-->
    <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Foreground" Value="#75BAFF"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
        <Setter Property="FontSize" Value="22"/>
      </Trigger>
    </Style.Triggers>
  </Style>
  <Style x:Key="GlyphList" TargetType="ItemsControl">
    <Setter Property="ItemsPanel">
      <Setter.Value>
        <ItemsPanelTemplate>
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
        </ItemsPanelTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
      <Setter.Value>
        <DataTemplate DataType="models:SpellingGlyph">
          <Grid Name="MainGrid">
            <TextBlock Text="{Binding Text}" VerticalAlignment="Bottom" Effect="{StaticResource BlackShadow}"  Margin="0,0,5,0"/>
            <TextBlock Text="{Binding Text}" ToolTip="{Binding Pronunciations}" Style="{StaticResource Spelling.TextGlyph}" VerticalAlignment="Bottom" Margin="0,0,5,0"/>             
          </Grid>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>

person Justin Pihony    schedule 20.12.2013    source источник
comment
Опубликуйте свой текущий XAML и скриншот того, что у вас есть в настоящее время, по сравнению с тем, что вы ожидаете.   -  person Federico Berasategui    schedule 20.12.2013


Ответы (1)


Я понял! Мне пришлось использовать Label, чтобы я мог использовать ControlTemplate, что позволяет мне использовать DataTrigger и TargetName

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:models="clr-namespace:DesktopDictation.Spelling.Models">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="../FontStyles/TextBlock.DefaultFont.xaml"/>
  </ResourceDictionary.MergedDictionaries>
  <DropShadowEffect x:Key="BlackShadow" ShadowDepth="2" Direction="270" Color="Black" Opacity="75" BlurRadius="2"/>
  <Style x:Key="Spelling.TextGlyph" TargetType="TextBlock" BasedOn="{StaticResource TextBlock.DefaultFontFamilyStyle}">
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFFFFF"/>
  </Style>
  <Style x:Key="GlyphList" TargetType="ItemsControl">
    <Setter Property="ItemsPanel">
      <Setter.Value>
        <ItemsPanelTemplate>
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
        </ItemsPanelTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
      <Setter.Value>
        <DataTemplate DataType="models:SpellingGlyph">
          <Label x:Name="MainSmall" VerticalAlignment="Bottom">
            <Label.Template>
              <ControlTemplate>
                <Grid>
                  <TextBlock Name="Shadow" Text="{Binding Text}" VerticalAlignment="Bottom" Style="{StaticResource Spelling.TextGlyph}" Effect="{StaticResource BlackShadow}" Margin="0,0,5,0"/>
                  <TextBlock Name="MainText" Text="{Binding Text}" ToolTip="{Binding Pronunciations}" Style="{StaticResource Spelling.TextGlyph}" VerticalAlignment="Bottom" Margin="0,0,5,0"/>
                </Grid>
                <ControlTemplate.Triggers>
                  <DataTrigger Binding="{Binding ElementName=MainText, Path=IsMouseOver}" Value="True">
                    <Setter TargetName="MainText" Property="Foreground" Value="#75BAFF"/>
                    <Setter TargetName="MainText" Property="FontWeight" Value="SemiBold"/>
                    <Setter TargetName="MainText" Property="FontSize" Value="22"/>
                    <Setter TargetName="Shadow" Property="Foreground" Value="#75BAFF"/>
                    <Setter TargetName="Shadow" Property="FontWeight" Value="SemiBold"/>
                    <Setter TargetName="Shadow" Property="FontSize" Value="22"/>
                  </DataTrigger>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Label.Template>
          </Label>
        </DataTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>
person Justin Pihony    schedule 20.12.2013