2011-08-09 7 views
1

다음과 같은 동작이 필요합니다. 사용자가 마우스를 버튼 위로 움직이면 버튼 내부의 텍스트가 색상을 변경합니다. 다음 스타일 + 템플릿을 만듭니다.Silverlight - 버튼으로 색상이 변경되지 않습니다.

<Style TargetType="blib:ButtonWithImage"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <ImageBrush ImageSource="images/buttonBackground.png"></ImageBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Width" Value="173"></Setter> 
    <Setter Property="Height" Value="40"></Setter> 
    <Setter Property="Foreground" Value="#FF000000"/> 
    <Setter Property="Padding" Value="0"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFA3AEB9" Offset="0"/> 
       <GradientStop Color="#FF8399A9" Offset="0.375"/> 
       <GradientStop Color="#FF718597" Offset="0.375"/> 
       <GradientStop Color="#FF617584" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="blib:ButtonWithImage"> 
       <Border x:Name="Background" CornerRadius="0" Background="Transparent" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"> 
        <Grid Background="{TemplateBinding Background}"> 
         <vsm:VisualStateManager.VisualStateGroups> 
          <vsm:VisualStateGroup x:Name="CommonStates"> 
           <vsm:VisualState x:Name="Normal"/> 
           <vsm:VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <ColorAnimation Duration="0" Storyboard.TargetName="Text" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="#D8FFFFFF"></ColorAnimation> 
            </Storyboard> 
           </vsm:VisualState> 
           <vsm:VisualState x:Name="Pressed"> 
            <Storyboard> 
             <ColorAnimation Duration="0" Storyboard.TargetName="Text" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="#D8FFFFFF"></ColorAnimation> 
            </Storyboard> 
           </vsm:VisualState> 
           <vsm:VisualState x:Name="Disabled"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To=".55"/> 
            </Storyboard> 
           </vsm:VisualState> 
          </vsm:VisualStateGroup> 
          <vsm:VisualStateGroup x:Name="FocusStates"> 
           <vsm:VisualState x:Name="Focused"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity" To="1"/> 
            </Storyboard> 
           </vsm:VisualState> 
           <vsm:VisualState x:Name="Unfocused" /> 
          </vsm:VisualStateGroup> 
         </vsm:VisualStateManager.VisualStateGroups> 
         <StackPanel Height="Auto" Orientation="Horizontal" Margin="10,3,10,3"> 
          <Image Source="{TemplateBinding ImageSource}" Width="24" Height="24" Stretch="Fill"/> 
          <TextBlock x:Name="Text" Text="{TemplateBinding Content}" HorizontalAlignment="Left" FontWeight="Bold" Margin="5,0,0,0" VerticalAlignment="Center" FontSize="12" FontFamily="Arial" Foreground="#FFFFF6BB" /> 
         </StackPanel> 
        </Grid> 
       </Border> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

하지만 작동하지 않습니다. 왜?

답변

1

이 경우 템플릿의 루트 요소에 이라는 이름의 "Background"라는 속성이 연결되어야합니다. 현재 국경 내에있는 Grid에 있습니다. 그러나 VisualStateManager은 찾지 못할 것입니다.

ButtonWithImage 클래스는 Button에서 파생되어야하며 (GoToState를 호출 할 코드가없는 경우) 이미 사용하고있는 것으로 의심됩니다.

관련 문제