事件触发器无法在Storyboard上运行

时间:2013-01-20 06:59:00

标签: wpf inotifypropertychanged eventtrigger

我只是希望你能帮我填补我的WPF知识空白。

(请原谅通用命名,不确定是否有帮助)

我有一个实现INotifyPropertyChanged的自定义对象MyObject。它有一个名为MyCustomProperty的属性,如下所示;

public int MyCustomProperty
{
 get { return this._myCustomProperty; }
 set
 {
  if (this._myCustomProperty == value)
    return;
  this._myCustomProperty= value;
  OnPropertyChanged("MyCustomProperty");
 }
}

这一切都有效。 在我的WPF应用程序中,我有这三个功能;

private void DoStuff()
{
   AddItemsToCanvas();
   ChangeValues();
}

private void AddItemsToCanvas()
{
   DataTemplate dt = (DataTemplate)FindResource("myDataTemplate");
   foreach (MyObject temp in ListOfMyObjects)
   {
     ContentControl cc = new ContentControl();
     cc.ContentTemplate = dt;
     cc.Content = temp;
     myCanvas.Children.Add(cc);
   }
}

private void ChangeValues()
{
  // this simply changes the MyCustomPropery in each of the objects
}

DataTemplate看起来像这样;

<DataTemplate x:Key="myDataTemplate">
 <Canvas>
  <TextBlock Name="tb_debug" Text="{Binding Path=MyCustomProperty, NotifyOnTargetUpdated=True}">
   <TextBlock.Triggers>
    <EventTrigger RoutedEvent="Binding.TargetUpdated">
     <BeginStoryboard>
      <Storyboard>
       <DoubleAnimation Storyboard.TargetName="tb_debug" Storyboard.TargetProperty="(Canvas.Top)" From="0" To="350" Duration="0:0:1.6" />
      </Storyboard>
     </BeginStoryboard>
    </EventTrigger>
   </TextBlock.Triggers>
  </TextBlock>
 </Canvas>
</DataTemplate>

当MyCustomProperty发生变化时,它只是将文本框从画布的顶部移动到底部。

当UserControl加载时,我同时调用AddItemsToCanvas()和ChangeValues()。 Text值更新并显示正确的值,但触发器不会触发(即TextBox不会移动)。 之后的任何时候,当我调用ChangeValues()时,文本更新并且TextBox移动。

为什么EventTrigger会在初始时间失败? 提前谢谢

1 个答案:

答案 0 :(得分:2)

我不确定为什么Binding.TargetUpdated没有被调用,但是只有在目标已经设置时更新而不是第一次设置(可能)时才会调用它。

但您可以在EventTrigger的{​​{1}} TextBlock上添加另一个Loaded,以确保它在DataTremplate加载时触发。

示例:

UserControl