2012-02-24 3 views
0

コントロールテンプレートをTextBlockに設定したボタンがあります。マウスが上にあるときにテキストを「グロー」にしたい、キーボードを使用してテキストに移動してフォーカスが得られたら私は間違った場所に効果を設定していると思うので、私はこれを働かせるように見えません。誰かがこれのためにxamlを共有することができる前にこれをやったことがありますか?これまでの私のスタイルです。TextBlock Glow Effect(ボタンの内側)

<!--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

マウスオーバーグロウの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

+0

ターゲットプロパティの構文がわかりませんでした。この実例は、(Button.Content)。(TextBlock.Effect).Opacityの正しいフォーマットを示しています。これは私が探していたものです。 – pollaris