2012-12-25 72 views
2

闪烁背景这是我的自定义按钮:WP7 - 在自定义按钮

<Style TargetType="local:AnswerButton"> 
    <Setter Property="Background" Value="{StaticResource BlueGradient}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:AnswerButton"> 
       <Grid> 
        <Border BorderBrush="Blue" BorderThickness="2" CornerRadius="10"> 
         <Border Name="myBorder" Background="{TemplateBinding Background}" CornerRadius="9"> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="100"/> 
            <ColumnDefinition Width="*" /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Grid.Column="0" 
             TextAlignment="Center" VerticalAlignment="Center" 
             Text="{TemplateBinding Option}" Foreground="Yellow" /> 
           <TextBlock Grid.Column="1" 
             TextAlignment="Left" VerticalAlignment="Center" 
             Text="{TemplateBinding Text}" Foreground="Black" /> 
          </Grid> 
         </Border> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我如何设置自定义按钮动画?我试过这个:

ColorAnimation myColorAnimation = new ColorAnimation(); 
    myColorAnimation.From = Colors.Blue; 
    myColorAnimation.To = Colors.Green; 
    myColorAnimation.AutoReverse = true; 
    myColorAnimation.Duration = TimeSpan.FromSeconds(1); 


    Storyboard.SetTargetName(myColorAnimation, "myBorder"); 
    Storyboard.SetTargetProperty(myColorAnimation, 
     new PropertyPath(Border.BackgroundProperty)); 
    Storyboard myStoryboard = new Storyboard(); 
    myStoryboard.Children.Add(myColorAnimation); 

    myStoryboard.Begin(); 

但是它的目标名称有问题。我知道这是错误的,但我如何设置目标到自定义控件?我有我的第4页,我想设置这个动画,一个被选用:

<Controls:AnswerButton Name="btnAnswerA" Tap="AnswerButton_Tap"/> 
    <Controls:AnswerButton Name="btnAnswerB" Tap="AnswerButton_Tap"/> 
    <Controls:AnswerButton Name="btnAnswerC" Tap="AnswerButton_Tap"/> 
    <Controls:AnswerButton Name="btnAnswerD" Tap="AnswerButton_Tap"/> 

我不在乎,如果它会在代码或XAML中,但我怎么能得到一些自定义的按钮通过coloranimation闪烁(闪烁)?谢谢

编辑: 我尝试了许多选择与像Thaven的答案visualstatemanager,但它并没有帮助。真的没有人知道哪里可能出现问题?

+0

OK,你可以试试这个 - > Storyboard.SetTarget(myColorAnimation,Button1的); Storyboard.SetTargetProperty(myColorAnimation,new PropertyPath(System.Windows.Controls.Button.BackgroundProperty)); –

回答

1

如果我理解你的问题是正确的,你不知道如何设置动画来选择你的实例按钮,并在按下按钮时运行。

有几种方法可以实现这一点。其中之一是使用视觉状态。

在你的情况,XAML代码应该看起来有些像这样:

<Style TargetType="local:AnswerButton"> 
<Setter Property="Background" Value="Blue"/> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="local:AnswerButton"> 
      <Grid> 
       <Grid.Resources> 
        <Storyboard x:Name="AnimateChosen"/> 
       </Grid.Resources> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualStateGroup.Transitions> 
          <VisualTransition GeneratedDuration="0:0:0.2" To="Pressed"/> 
          <VisualTransition GeneratedDuration="0:0:0.2" To="Normal"/> 
         </VisualStateGroup.Transitions> 
         <VisualState x:Name="Normal"/> 
         <VisualState x:Name="Pressed"> 
          <Storyboard> 
           <ColorAnimation Duration="0" To="Lime" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="myBorder" d:IsOptimized="True"/> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <Border BorderBrush="Blue" BorderThickness="2" CornerRadius="10" Background="Black"> 
        <Border x:Name="myBorder" CornerRadius="9" Background="Blue"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="100"/> 
           <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <TextBlock Grid.Column="0" 
           TextAlignment="Center" VerticalAlignment="Center" 
           Text="{TemplateBinding Option}" Foreground="Yellow" /> 
          <TextBlock Grid.Column="1" 
           TextAlignment="Left" VerticalAlignment="Center" 
           Text="{TemplateBinding Text}" Foreground="Black" /> 
         </Grid> 
        </Border> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

有关动画和视觉样式的Windows Phone

的更多信息:

http://windowsphonegeek.com/articles/WP7-Animations-in-depthndash-Overview-and-Getting-Started

http://www.windowsphonegeek.com/articles/WP7-working-with-VisualStates-How-to-make-a-ToggleSwitch-from-CheckBox

+0

我不知道为什么,但它不起作用。当我点击按钮时,它会在AnswerButton_Tap中执行代码,但不是那个动画。也许Storyboard.TargetProperty应该改变,但我不知道如何。 –

+0

你说得对,你的解决方案工作。我只是不知道我必须调用这个可视状态(就像这个'VisualStateManager.GoToState(btnAnswerA,state,false);')。我认为那个按钮自动调用状态,名称为按下:) –

2

我有一个非常简单的想法,我希望这对你有好处。你有每个按钮的点击事件,对吧?

private void Button1_Click_1(object sender, RoutedEventArgs e) 
    { 
     DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
     dispatcherTimer.Tick += dispatcherTimer_Tick; 
     dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 10); 
     dispatcherTimer.Start(); 

    } 
    private void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 

     Random rnd = new Random();    
     Button1.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(
         Convert.ToByte(rnd.Next(255)), 
         Convert.ToByte(rnd.Next(255)), 
         Convert.ToByte(rnd.Next(255)), 
         Convert.ToByte(rnd.Next(255)) 
        ));    
    }