【问题标题】:Button blinking on DatatriggerDatatrigger 上的按钮闪烁
【发布时间】:2013-08-03 07:00:25
【问题描述】:

我想要一个在 DataTrigger 触发时闪烁/动画的按钮。我想为按钮的背景设置动画。下面是我的 xaml 代码。

<Window.Resources>
    <Style x:Key="ButtonStyle"  TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.Notification}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard Name="StartBlinking">
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" To="Orange" Duration="00:00:00.4" RepeatBehavior="Forever" AutoReverse="True"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.Notification}" Value="False">
                <DataTrigger.EnterActions>
                    <RemoveStoryboard BeginStoryboardName="StartBlinking"/>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>

</Window.Resources>
<Grid>
    <Grid>
        <Button x:Name="Button" Content="Button" Width="25" Height="25" Margin="158,62,320,224" Click="Button_Click"></Button>
        <Button Style="{StaticResource ButtonStyle}" Content="Button" Focusable="False" Height="75" HorizontalAlignment="Left" Margin="23,146,0,0" Name="btnImgBrush" VerticalAlignment="Top" Width="160"></Button>

    </Grid>
</Grid>

这里是后端代码:

public Boolean Notification
    {
        get { return new_notification; }

        set 
        {
            new_notification = value;
            RaisePropertyChanged("Notification");
        }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (Notification)
        {
            Notification = false;
        }
        else
        {
            Notification = true;
        }
    }

但是,它没有用。任何想法为什么它不起作用?

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 您不能像这样为背景属性设置动画。.动画对象不能用于为属性“背景”设置动画,因为它的类型为“System.Windows.Media.Brush”不兼容。
  • 您在哪里声明了您的通知属性..??在视图模型中或代码后面..??
  • 是的,我已经在视图模型中声明了通知属性。还有其他方法可以根据 Notification 属性为按钮背景设置动画吗?
  • 试试我的代码..我希望它对你有帮助..它工作正常:)
  • 它对我不起作用。 :(

标签: wpf xaml button storyboard datatrigger


【解决方案1】:

终于开始工作了。谢谢:)

<Window.Resources>
<Style x:Key="ButtonStyle"  TargetType="{x:Type Button}">
  <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="Transparent"/>
            </Setter.Value>
        </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.Notification}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Name="StartBlinking">
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" To="Orange" Duration="00:00:00.4" RepeatBehavior="Forever" AutoReverse="True"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.Notification}" Value="False">
            <DataTrigger.EnterActions>
                <RemoveStoryboard BeginStoryboardName="StartBlinking"/>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

    【解决方案2】:

    试试这个-

    <Style x:Key="ButtonStyle"  TargetType="{x:Type Button}">
     <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Notification,RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard Name="StartBlinking">
                                        <Storyboard>
                                            <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" From="Transparent" To="Orange" Duration="00:00:00.4" RepeatBehavior="Forever" AutoReverse="True"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Path=Notification,,RelativeSource={RelativeSource AncestorType=Window}}" Value="False">
                                <DataTrigger.EnterActions>
                                    <RemoveStoryboard BeginStoryboardName="StartBlinking"/>
                                </DataTrigger.EnterActions>
                            </DataTrigger>
                        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 你能在你定义了通知属性的地方显示你的视图模型代码吗?还有一些 xaml 代码
    • 我已经编辑了问题,并在我定义了通知属性的地方添加了其他 xaml 代码和 viewmodel 代码。
    【解决方案3】:

    TM RocketVishal 的答案都是正确的,但可能以下是最正确和最干净的方法

    <Window.Resources>
      <Style x:Key="ButtonStyle"  TargetType="{x:Type Button}">
        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="Transparent"/>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
          <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.Notification}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Name="StartBlinking">
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" To="Orange" Duration="00:00:00.4" RepeatBehavior="Forever" AutoReverse="True"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <RemoveStoryboard BeginStoryboardName="StartBlinking"/>
            </DataTrigger.ExitActions>
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </Window.Resources>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2018-01-30
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多