Datatrigger不会触发故事板或根本不触发故事板

时间:2014-02-20 23:33:35

标签: c# wpf viewmodel datatrigger

无论我做什么,我似乎无法让Data触发器工作。我正在尝试从视图模型中播放一个故事板,当一个值发生变化但没有任何反应,没有错误,没有找不到绑定,只是没有...我正在尝试使用的代码是:

XAML:

<Page
 DataContext="{Binding ViewModel, Source={StaticResource Locator}}">
 <Page.Resources>
   <DataTrigger x:Key="alertInDataTrigger" Binding="{Binding alert}" Value="1">
      <DataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource alertIn}" x:Name="alertIn_start"/>
      </DataTrigger.EnterActions>
      <DataTrigger.ExitActions>
            <RemoveStoryboard BeginStoryboardName="alertIn_start" />
      </DataTrigger.ExitActions>
   </DataTrigger>

   <Storyboard x:Key="alertIn" Changed="visible" >
     <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="alert">
        <EasingThicknessKeyFrame KeyTime="0:0:0.3" Value="729,2,2,658"/>
     </ThicknessAnimationUsingKeyFrames>
   </Storyboard>
 <\Page.Resources>

C#:

public int alert
    {
        get { return this._alert; }
        set
        {
            if (this._alert != value)
            {
                int oldalert = this._alert;
                this._alert = value;
                RaisePropertyChanged("alert");
            }
        }
    }

我可以看到int警报正确地更改为1并且我知道页面绑定正在起作用,因为页面上的所有其他绑定都正确显示了它们的绑定但我似乎无法使数据触发器起作用。我可以在这个难题上使用一点帮助:/

1 个答案:

答案 0 :(得分:0)

我看到你做错了两件事。一个是触发器应该添加到Page.Triggers而不是Page.Resources。如果触发器位于资源中,它将永远不会触发。

另一个是Storyboard.TargetName="alert"。除非您在Page中有一个名为alert的元素,否则不应将其设置为alert。我相信如果你不添加Story.TargetName,那么它默认为当前元素,即页面。否则,请设置要为其边距设置动画的元素的名称。