2012-02-24 84 views
0

我有一个按钮,它的控件模板设置为TextBlock。当鼠标移动到文本上或者通过键盘移动到文本时,我希望文本“发光”。我似乎无法得到这个工作,因为我认为我在错误的地方设置了效果。有没有人在此之前完成此操作可以共享xaml。这是我迄今的风格。TextBlock发光效果内部按钮

<!--Back Button--> 
<Style x:Key="MoviesBackButton" 
     TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <TextBlock Text="Back" Style="{DynamicResource MoviesButtonBackTextBlock}" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Width" 
      Value="40" /> 
    <Setter Property="Height" 
      Value="25" /> 
    <Setter Property="VerticalAlignment" 
      Value="Top" /> 
    <Setter Property="HorizontalAlignment" 
      Value="Left" /> 
    <Setter Property="Margin" 
      Value="10,5,0,0" /> 
</Style> 
<Style x:Key="MoviesButtonBackTextBlock" 
     TargetType="TextBlock"> 
    <Setter Property="Foreground" 
      Value="{DynamicResource MoviesButtonBackTextBlockForeground}" /> 
    <Setter Property="FontFamily" 
      Value="Segoe UI Light, Lucida Sans Unicode, Verdana" /> 
    <Setter Property="FontSize" 
      Value="20" /> 
    <Setter Property="TextOptions.TextHintingMode" 
      Value="Animated" /> 
</Style> 
<LinearGradientBrush x:Key="MoviesButtonBackTextBlockForeground" 
        EndPoint="0.5,1" 
        StartPoint="0.5,0"> 
    <GradientStop Color="LightGray" 
        Offset="0" /> 
    <GradientStop Color="Gray" 
        Offset="1" /> 
</LinearGradientBrush> 

回答

1

下面是一个针对鼠标悬停发光的解决方案。您可以为Button.GotKeyboardFocus/LostKeyboardFocus添加类似的事件触发器。

如果我真的这样做,我可能会创建一个自定义控件并使用视觉状态。搜索“Visual State Manager”以获取更多信息。

<Grid> 
    <Grid.Resources> 
     <Style x:Key="TextBoxGlow" TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Button.MouseEnter"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="(Button.Content).(TextBlock.Effect).Opacity" From="0" 
            To="1" Duration="0:0:0.5" /> 
       </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
      </EventTrigger> 
      <EventTrigger RoutedEvent="Button.MouseLeave"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="(Button.Content).(TextBlock.Effect).Opacity" From="1" 
            To="0" Duration="0:0:0.5" /> 
       </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
      </EventTrigger> 
     </Style.Triggers> 
     </Style> 

    </Grid.Resources> 

    <StackPanel> 
     <Button Style="{StaticResource TextBoxGlow}" Margin="5"> 
     <TextBlock Text="I'm glowing" FontSize="28" Padding="10"> 
      <TextBlock.Effect> 
      <DropShadowEffect BlurRadius="8" Color="Crimson" ShadowDepth="0" Opacity="0" /> 
      </TextBlock.Effect> 
     </TextBlock> 
     </Button> 
    </StackPanel> 
    </Grid> 
+0

感谢菲尔,Unfortionatly我不能使用自定义的控件我的应用程序是完全可换肤(IE我开始在我看来,一个空白的按钮,所有的风格在资源字典中发生的) - 然而,上述完美的工作人员,这正是我所追求的效果。非常感谢!!! – Oli 2012-02-27 10:56:36

+0

我正在绊倒目标属性语法。这个工作示例显示了(Button.Content)。(TextBlock.Effect).Opacity的正确格式,这正是我所寻找的。 – pollaris 2017-01-24 01:49:36